<?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>216041</bug_id>
          
          <creation_ts>2020-09-01 10:03:38 -0700</creation_ts>
          <short_desc>Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore</short_desc>
          <delta_ts>2021-07-21 03:25:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=203547</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217006</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217142</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=228128</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>216822</dependson>
    
    <dependson>216927</dependson>
    
    <dependson>217063</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>beidson</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1684515</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:03:38 -0700</bug_when>
    <thetext>Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684517</commentid>
    <comment_count>1</comment_count>
      <attachid>407690</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:04:54 -0700</bug_when>
    <thetext>Created attachment 407690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684518</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-01 10:05:45 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684520</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:07:28 -0700</bug_when>
    <thetext>I&apos;m separating this approach&apos;s attempts so the EWS bubbles load faster and to keep the two approaches separate from each other so I can see my progress.
This first patch is just to see the EWS results.  It is not done yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685814</commentid>
    <comment_count>4</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-09-04 12:28:42 -0700</bug_when>
    <thetext>Seems like this breaks api tests on macOS.

https://ews-build.webkit.org/#/builders/3/builds/31500
https://ews-build.webkit.org/#/builders/3/builds/31493
https://ews-build.webkit.org/#/builders/3/builds/31485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686604</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 10:04:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/68514363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688357</commentid>
    <comment_count>6</comment_count>
      <attachid>408733</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-14 12:15:43 -0700</bug_when>
    <thetext>Created attachment 408733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688358</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-14 12:16:31 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688359</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-14 12:16:43 -0700</bug_when>
    <thetext>Not done yet.  Uploading WIP to get a checkpoint on which tests still need work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688822</commentid>
    <comment_count>9</comment_count>
      <attachid>408853</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-15 13:23:25 -0700</bug_when>
    <thetext>Created attachment 408853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690118</commentid>
    <comment_count>10</comment_count>
      <attachid>409211</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-19 14:21:33 -0700</bug_when>
    <thetext>Created attachment 409211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690122</commentid>
    <comment_count>11</comment_count>
      <attachid>409214</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-19 16:34:05 -0700</bug_when>
    <thetext>Created attachment 409214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690439</commentid>
    <comment_count>12</comment_count>
      <attachid>409300</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 12:36:33 -0700</bug_when>
    <thetext>Created attachment 409300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690531</commentid>
    <comment_count>13</comment_count>
      <attachid>409323</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 14:59:59 -0700</bug_when>
    <thetext>Created attachment 409323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690540</commentid>
    <comment_count>14</comment_count>
      <attachid>409327</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 15:13:04 -0700</bug_when>
    <thetext>Created attachment 409327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690611</commentid>
    <comment_count>15</comment_count>
      <attachid>409341</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 18:53:21 -0700</bug_when>
    <thetext>Created attachment 409341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690612</commentid>
    <comment_count>16</comment_count>
      <attachid>409342</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 18:54:36 -0700</bug_when>
    <thetext>Created attachment 409342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690615</commentid>
    <comment_count>17</comment_count>
      <attachid>409345</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 19:51:40 -0700</bug_when>
    <thetext>Created attachment 409345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690629</commentid>
    <comment_count>18</comment_count>
      <attachid>409349</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 23:42:41 -0700</bug_when>
    <thetext>Created attachment 409349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690635</commentid>
    <comment_count>19</comment_count>
      <attachid>409350</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 23:56:20 -0700</bug_when>
    <thetext>Created attachment 409350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690645</commentid>
    <comment_count>20</comment_count>
      <attachid>409350</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-22 00:37:08 -0700</bug_when>
    <thetext>Comment on attachment 409350
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:195
&gt; +        if (m_sessionID.isEphemeral() || m_sessionID == PAL::SessionID::defaultSessionID())
&gt; +            m_networkProcess = NetworkProcessProxy::defaultNetworkProcess();

This is actually making the network process a singleton for the default session and the reason why tests are failing in GTK. I&apos;ll investigate more to see why they fail when reusing the same process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690647</commentid>
    <comment_count>21</comment_count>
      <attachid>409350</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-22 01:01:20 -0700</bug_when>
    <thetext>Comment on attachment 409350
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:195
&gt;&gt; +            m_networkProcess = NetworkProcessProxy::defaultNetworkProcess();
&gt; 
&gt; This is actually making the network process a singleton for the default session and the reason why tests are failing in GTK. I&apos;ll investigate more to see why they fail when reusing the same process.

Every test case uses a new web context (process pool) to ensure a clean env. What happens now is that the first test case creates a website data store for the default session id, when the next test starts a new websitedata store is created for the default session id again, and the previous one is destroyed, since destroy happens after the create, we end up removing the newly created one, since we use the session id. I don&apos;t think we can share the network process for GLib API, it&apos;s ok to move the ownership to the data manager, but the process should be created and destroyed with the data store. I think we could share a process for ephemeral sessions, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690727</commentid>
    <comment_count>22</comment_count>
      <attachid>409367</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 09:21:48 -0700</bug_when>
    <thetext>Created attachment 409367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690773</commentid>
    <comment_count>23</comment_count>
      <attachid>409378</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 10:44:57 -0700</bug_when>
    <thetext>Created attachment 409378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690776</commentid>
    <comment_count>24</comment_count>
      <attachid>409378</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-09-22 11:00:21 -0700</bug_when>
    <thetext>Comment on attachment 409378
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore

Could the changelog explain why we&apos;re doing this? Why this is better than the current state? It is non-obvious to me at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691035</commentid>
    <comment_count>25</comment_count>
      <attachid>409451</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 23:01:02 -0700</bug_when>
    <thetext>Created attachment 409451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691045</commentid>
    <comment_count>26</comment_count>
      <attachid>409452</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 00:19:46 -0700</bug_when>
    <thetext>Created attachment 409452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691177</commentid>
    <comment_count>27</comment_count>
      <attachid>409484</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 10:58:38 -0700</bug_when>
    <thetext>Created attachment 409484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691268</commentid>
    <comment_count>28</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 14:41:47 -0700</bug_when>
    <thetext>*** Bug 203547 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691488</commentid>
    <comment_count>29</comment_count>
      <attachid>409484</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:23:08 -0700</bug_when>
    <thetext>Comment on attachment 409484
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:183
&gt; -    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
&gt; -        auto result = nonDefaultDataStores().add(m_sessionID, this);
&gt; -        ASSERT_UNUSED(result, result.isNewEntry);
&gt; +    auto result = allDataStores().add(m_sessionID, this);
&gt; +    ASSERT_UNUSED(result, result.isNewEntry);

This is a problem for GLib API too. In our API persistent data stores are always created with the default session ID, and are expected to be asociated with a web context (a process pool). So, you could have two default data stores each associated to a different context. Both are the default one, but the default for its network process. With this patch, creating a second data store will assert in debug. Note that we don&apos;t expose session IDs in our API on purpose. A possible solution would be to remove the concept of default session, and simply use a different session ID for each data store. After this patch the default session is not used that much, for soup we would just need to figure out how to implement the DNS resolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691493</commentid>
    <comment_count>30</comment_count>
      <attachid>409568</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:51:27 -0700</bug_when>
    <thetext>Created attachment 409568
Rebased patch

This is the patch rebased on top of current trunk and patch attached to bug #216927.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691494</commentid>
    <comment_count>31</comment_count>
      <attachid>409569</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:52:37 -0700</bug_when>
    <thetext>Created attachment 409569
GLib API changes

This patch contains the changes I added on top of the rebased patch just to make it easier to see them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691495</commentid>
    <comment_count>32</comment_count>
      <attachid>409569</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:54:19 -0700</bug_when>
    <thetext>Comment on attachment 409569
GLib API changes

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:163
&gt; +#if PLATFORM(GTK) || PLATFORM(WPE)
&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; +#endif

I added this to catch code using the default data store with the GLib API. I think the inspector uses it and probably some other places, so a few tests might still fail. I&apos;ll check those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691496</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:56:54 -0700</bug_when>
    <thetext>Ah, there&apos;s also the initial accept cookie policy, but I think we no longer need that, I&apos;ll check that too, but I think bug #216927 is the only one blocking this from the GLib API now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691541</commentid>
    <comment_count>34</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 09:14:54 -0700</bug_when>
    <thetext>Wonderful!  Thanks, Carlos!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691581</commentid>
    <comment_count>35</comment_count>
      <attachid>409598</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 10:53:59 -0700</bug_when>
    <thetext>Created attachment 409598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691587</commentid>
    <comment_count>36</comment_count>
      <attachid>409600</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:00:37 -0700</bug_when>
    <thetext>Created attachment 409600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691594</commentid>
    <comment_count>37</comment_count>
      <attachid>409603</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:11:59 -0700</bug_when>
    <thetext>Created attachment 409603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691598</commentid>
    <comment_count>38</comment_count>
      <attachid>409604</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:17:44 -0700</bug_when>
    <thetext>Created attachment 409604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691615</commentid>
    <comment_count>39</comment_count>
      <attachid>409607</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:38:55 -0700</bug_when>
    <thetext>Created attachment 409607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691703</commentid>
    <comment_count>40</comment_count>
      <attachid>409631</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 16:06:30 -0700</bug_when>
    <thetext>Created attachment 409631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691912</commentid>
    <comment_count>41</comment_count>
      <attachid>409631</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-09-25 09:42:17 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

Too big to critically analyze every single change.

Overall, seems fine.

Yay tests.

One specific review comment.

&gt; Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h:82
&gt; -    bool shouldEnableITPDatabase { false };
&gt; +    bool shouldEnableITPDatabase { true };

Why this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691990</commentid>
    <comment_count>42</comment_count>
      <attachid>409631</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 12:32:55 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h:82
&gt;&gt; +    bool shouldEnableITPDatabase { true };
&gt; 
&gt; Why this change?

This changed under me during my many rebases.  I don&apos;t think this did any change because it is always set from elsewhere, but I&apos;ll not make this change.
I&apos;ll also double check everything before landing to find any more there may be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692111</commentid>
    <comment_count>43</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 16:54:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/r267608</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692157</commentid>
    <comment_count>44</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 23:36:13 -0700</bug_when>
    <thetext>This caused some API tests to fail on the bots.  Why they&apos;re so different than EWS, I may never know.

{
    &quot;Failed&quot;: [
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1543\nValue of: isRegistered\n  Actual: false\nExpected: true\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.MigrateDataFromMissingTopFrameUniqueRedirectSameSiteStrictTableSchema&quot;
        }, 
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1582\nExpected equality of these values:\n  static_cast&lt;int&gt;([thirdPartyData count])\n    Which is: 0\n  1\n\n\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1586\nExpected equality of these values:\n  thirdParty.thirdPartyDomain\n    Which is: \&quot;\&quot;\n  @\&quot;webkit.org\&quot;\n    Which is: \&quot;webkit.org\&quot;\n\n\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1591\nExpected equality of these values:\n  firstParty.firstPartyDomain\n    Which is: \&quot;\&quot;\n  @\&quot;apple.com\&quot;\n    Which is: \&quot;apple.com\&quot;\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.CanAccessDataSummaryWithNoProcessPool&quot;
        }, 
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1453\nValue of: isRegistered\n  Actual: false\nExpected: true\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.MigrateDataFromIncorrectCreateTableSchema&quot;
        }
    ], 
    &quot;Timedout&quot;: [
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.ShouldNotGrandfatherOnStartup&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.GrandfatherCallback&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.ChildProcessesNotLaunched&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.GrandfatherCallbackDatabase&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.Fullscreen.WKViewDelegate&quot;
        }
    ], 
    &quot;Skipped&quot;: [], 
    &quot;Crashed&quot;: []
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692158</commentid>
    <comment_count>45</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 23:39:44 -0700</bug_when>
    <thetext>Reverted r267608 for reason:

Caused API test failures

Committed r267618: &lt;https://trac.webkit.org/changeset/267618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692161</commentid>
    <comment_count>46</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-26 00:26:13 -0700</bug_when>
    <thetext>Please, give me some time to check the layout test failures too before landing this again. See bug #217006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692495</commentid>
    <comment_count>47</comment_count>
      <attachid>409631</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-28 00:56:16 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

&gt; Tools/WebKitTestRunner/TestController.cpp:-3173
&gt; -    WKContextSetPrimaryWebsiteDataStore(context, defaultWebsiteDataStore());

This is the problem of layout tests for GTK and WPE. The WTR default data store is not set as web view data store either now, so when the web page is created the default data store s created and used for the page. I&apos;ll submit a rebased patch with the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692873</commentid>
    <comment_count>48</comment_count>
      <attachid>409981</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-29 03:47:36 -0700</bug_when>
    <thetext>Created attachment 409981
Rebased patch

Patch rebased and updated to fix GTK and WPE layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693017</commentid>
    <comment_count>49</comment_count>
      <attachid>410019</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 11:02:24 -0700</bug_when>
    <thetext>Created attachment 410019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693030</commentid>
    <comment_count>50</comment_count>
      <attachid>410023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 11:17:25 -0700</bug_when>
    <thetext>Created attachment 410023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693166</commentid>
    <comment_count>51</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 14:44:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/r267763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694949</commentid>
    <comment_count>52</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-05 16:46:44 -0700</bug_when>
    <thetext>This was rdar://problem/69175060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719991</commentid>
    <comment_count>53</comment_count>
      <attachid>410023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-15 13:51:34 -0800</bug_when>
    <thetext>Comment on attachment 410023
Patch

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

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:-350
&gt; -    addIndexedDatabaseSession(sessionID, parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);

This is still needed.  See https://bugs.webkit.org/show_bug.cgi?id=220666</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407690</attachid>
            <date>2020-09-01 10:04:54 -0700</date>
            <delta_ts>2020-09-14 12:15:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200901100452.patch</filename>
            <type>text/plain</type>
            <size>282496</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4ZDRhM2RmMTZiNGJhYmRk
YmQ5ZjZkNTgyOTdmNDE1ZGFhM2M0YmYuLjA1NmMyYWE0MDFjOWU2NjI0ZWY1MzgyNThiMTcxMGQ5
ZWM1ZGZkZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTAxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMDEg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBG
aXggY3Jhc2ggZHVyaW5nIFdlYlBhZ2UgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTky
NTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQ
Q29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0
aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0
UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lv
bihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMzAwNTNkYTRkNzdhMzFhOWZmYTJi
NTJjYTMxZjNjYzc3YTkyOTE0My4uZDdjZjU4YzdmNzgxOTdhODVjYjU0NmE3MWI5MzI5MWMxOTBk
NzA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAg
ICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25J
RDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhp
cywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
ck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRh
U3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2lu
U3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNp
dGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vz
c2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3Jr
ZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5k
aWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lv
bi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50
IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6
ZShwYXJhbWV0ZXJzKTsKQEAgLTQyNywxMiArNDE3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lkZW50aWZpZXIgaWRl
bnQKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0g
ICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRl
bnRpYWxzKCk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpCi0gICAgICAgIG5ldHdv
cmtTZXNzaW9uLT5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLQogICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXSAoYXV0byYgbmV0
d29ya1Nlc3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Npb24gPSBuZXR3b3Jr
U2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgICAgIHN0b3JhZ2VTZXNz
aW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKQEAgLTUxMiw4ICs0
OTYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNl
bmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjgsNyArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29s
IHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VT
dHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2Ug
aWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAg
ICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3Jl
YXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAog
ICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkg
ewpAQCAtNTUxLDIxICs1MzMsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0
UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVy
biAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikK
IHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8m
IHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAg
ICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMmE0ZTlmNjJjYWY3ZjAxYjcxMjZiNTg5
YjU0NGI1ZDcyMzcwMzBkNC4uNTA4NGIxY2YyZjc0NjRjNGNlZmQxYzJlYmE3ZDA1OTAzMzk5MGY0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzcxLDcgKzM3MCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ4LDcgKzU0
Niw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDcwZDM3NmZh
OTY0NmQwZWZmNjE2MmI1OWUxNjVlZjFmNjBhOGJhYzEuLmNmNmY0YWI4YmZkNWEyNTA5YzkzMzI0
ODUwYmRjOTY2M2M0YzRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBA
IC01Niw3ICs1Niw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgSVBDOjplbmNvZGUoZW5jb2Rl
ciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vz
c0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09V
UCkKICAgICBlbmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8IGln
bm9yZVRMU0Vycm9yczsKQEAgLTY5LDkgKzY5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBl
bmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBlbmNvZGVyIDw8IHVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwg
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzaG91
bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5OwotI2VuZGlmCiAg
ICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKICAgICBlbmNvZGVyIDw8IGVu
YWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0KQEAgLTExOSwxMSArMTE2LDExIEBA
IGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgog
Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBPcHRpb25hbDxWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAg
IGRlY29kZXIgPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRhdGFTdG9yZVBhcmFt
ZXRlcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CisgICAg
cmVzdWx0LmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3RvcmVQYXJhbWV0ZXJz
KTsKIAogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tp
ZUFjY2VwdFBvbGljeSkpCkBAIC0xNDUsMjAgKzE0Miw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQ
cm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgT3B0
aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAxYjliM2RhZWQxY2NlYWI1ZDRmZmMzMDUwMjg5ZTE1
YmY4ODkxOGU1Li4wNGQ4NGI3ZDA4ZTFjZWM0NGRlOTQ2YmIwMmQyNmI3MmMxMmQwZDEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NiwxMiArODYsNyBA
QCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0
YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDlkNzNlYTEyZjE0OGE3
OGFiMzQ0NjljYWI4NjIxZDdjN2Q1ZDQ3NzguLjI0OWFlZDRiZTMzMmRjYzZjMWQyYWQ1ZjZkZTdh
ZWI4Y2Y4MzViYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25z
dCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRl
cnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA3LDExICsxMDQsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENh
Y2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRp
dERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2
NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNk
NDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2
NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2
b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7
CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2ll
U3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJz
LnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAg
ICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlp
bmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAg
ICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFr
ZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nl
c3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Mu
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6
IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShj
b29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggNDFhZmRj
YzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5
M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1l
dGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGln
bm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9y
ZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4
Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2
ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRl
bXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlm
ICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
PiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBw
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4
IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUz
NzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVj
dCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IDljOGYwM2Ex
OGZhZjZlN2YxOWVmZWRmYjg3OTY5YTA5NzNmMDQ3MWIuLjEzZDU0MWQ2MWMwNTE1MmRiOTI2NDA5
YWZlMjNjZmU5M2UyNjVhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkg
ewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURh
dGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9y
ZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgp
CiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
ODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxs
Q29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2ll
cyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAg
YWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVz
KCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRl
ckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2ll
TWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wg
PSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUg
eworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVz
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsK
ICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNG
b3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewor
ICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxl
IHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVj
YXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9j
ZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAg
ICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAg
ICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5h
ZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2Vy
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAg
ICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2ll
TWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAg
ICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29r
aWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3Zl
UGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tp
ZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxl
dGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFs
bENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAg
ZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBs
ZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5l
dHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGlj
eSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBjbGFzcyBBUElXZWJDb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlciA6IHB1YmxpYyBXZWJDb29raWVNYW5hZ2VyUHJveHk6Ok9ic2Vy
dmVyIHsKQEAgLTIyMiwyMSArMTUyLDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVy
T2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0
aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0
ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50
aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAg
ICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Cisg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
ICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjcxLDQ2ICsxODcsMTAg
QEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0g
ICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBD
b29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewot
ICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQot
ICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQ
b29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vz
c1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBl
eGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAg
ICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUg
bmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQot
ICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bv
b2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
cik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwot
fQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBI
VFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElI
VFRQQ29va2llU3RvcmUuaAppbmRleCAwMzgwNWU2NDk3MGIzY2U5ZTM2MTA1ZGU5ZjZlYTJhZDky
ZjEzZmEyLi42M2IxZjUwZjI2OTJiMTllNjA4ODU2ZTA4YTZhY2FjNmM5NmZhNDFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04
Miw5ICs4Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQ
b29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2ll
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA4ZmI4ZTA5
NmQ0NjZlMjM2MWNkYjUyMDNlZmM5YzU2OGM5ZTY5NTExLi4xYWU5NmQyZWQ3YzhlYjFmOWZiYzlm
YzQyMGI4ZjJhMGY1OWU0ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAKQEAgLTQyNiw5ICs0MjYsMTAgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0
VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2Vy
UmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitX
S0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYp
CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIC8vIEZJ
WE1FOiBEZXByZWNhdGUgdGhpcy4gUmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyBvbiB0aGUgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGlmIG5lZWRlZC4KKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpKTsKIH0KIAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAtNTQzLDkgKzU0NCw4IEBA
IHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7CiB9CiAK
LXZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250
ZXh0KQordm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVm
KQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT51c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQpAQCAtNTUz
LDEzICs1NTMsNiBAQCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
V2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dAogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3Mp
OwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5jbGVhckNhY2hlZENyZWRl
bnRpYWxzKCk7CkBAIC02MTgsNyArNjExLDcgQEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2
aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllcigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBs
dWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0
cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRl
bnNpb25zUmVmKQpAQCAtNjY2LDEyICs2NTksMTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckxlZ2Fj
eVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgdm8K
ICAgICB9KTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
CiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQ
cmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlX
ZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewot
ICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJL
aXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggMzljMGNhN2NjNmE2YjZiNTVj
ODAzYjgzY2RlNWIzOGJmYzE5Yzk4ZS4uODg0NzRkMzBhMGQwYmI4NGExOWI2MTBjMmMxNWI5YWMx
MmJkMDljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGlu
ZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJv
b2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJl
Zm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCA2ODIwZjQ5MWU5NDc1
OTVlMDBkMGNiZDJkNTg4OTUyMDcwM2E1ODA4Li5mYThlMGE3ZjU0ZTRlMzE0MDZiYTcyMDMwMDZk
ZDQwY2EzMWFkNjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtMjAxLDcgKzIwMSw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NQ
b29sICpzaGFyZWRQcm9jZXNzUG9vbDsKIAogLSAodm9pZClfc2V0Q29va2llQWNjZXB0UG9saWN5
OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdlYkNvcmU6
OnRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgLy8gRklY
TUU6IERlcHJlY2F0ZSB0aGlzIGFuZCByZXBsYWNlIGl0IHdpdGggU1BJIG9uIFdLV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0
Rm9yQnVuZGxlUGFyYW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpAQCAtNDM3LDEyICs0Mzgs
MTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIKIHsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIo
KTsKKyAgICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlm
aWVyCkBAIC01NzgsMTMgKzU3OSw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFz
aE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3By
b2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0t
ICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wp
YWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5k
aWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25D
b3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MTcsMTEg
KzYxMSw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFy
eShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1h
bmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVk
ZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVj
dGlvblNwYWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IGQzOWRiMWRkYjA5YzA4Y2M3ODAxN2Q0
ZTFmNDVmYzhkMjU2ZjVjZGYuLjVhM2Y3YThmYjdlMzczZWI2ZGY2ZDIyZGMyOTYzYjM2OWQxOWM2
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC0xMjIsOSArMTIyLDcgQEAKIC0gKHZvaWQpX3ByZWNv
bm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40
LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5Lgot
LSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09M
KWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAo
dm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3Qp
cGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29t
cGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIp
KTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0
cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX2FsbG93QW55VExTQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDlkZWEzZTZmMzIwZjIw
MTUzOTFlMWUyMDhjODc2NmI2NGExYmI4ZjUuLjcyMTI4ZjZlMzA3MzA4MjFiNjdlNDllZTgxN2Fm
MjFjZmFhNThkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMg
VmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5T
QXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJl
dHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVn
YXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggZmNjYzZiNTk3ZWYzNzdlN2MwNGQ5MmRiNjcwYmQ0
MTM1ZDg2MTFmNy4uN2NlZTk2YWM5MTFiZDc2ZDY2YzA4YmU4OTZmZDg5NDg0OWYxY2Q5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04Myw2ICs4Myw4IEBAIHR5cGVkZWYgTlNfT1BU
SU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7CiAKIC0g
KHZvaWQpX3JlbmFtZU9yaWdpbjooTlNVUkwgKilvbGROYW1lIHRvOihOU1VSTCAqKW5ld05hbWUg
Zm9yRGF0YU9mVHlwZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopZGF0YVR5cGVzIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIAorLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
KwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURh
dGFTdG9yZURlbGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIF9XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5mYjk4
ZDA1OTBjOWFkMjgyMzVkNzExYjdjYWFjOWJjNTVjOWE2NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApA
QCAtNjQsOCArNjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAog
ICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0K
IAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEg
KzEzOCw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQo
bWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFn
ZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzAsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAg
aWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2luZ2xldG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJp
bmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTg4LDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdl
ciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdF
UihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
LT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0
b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5h
Z2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSks
IFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdl
ciwgR0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQo
dGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7
CiB9CkBAIC0yNjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6
OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdf
dGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMy
MCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9m
YWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19u
ZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8g
Q29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNl
IG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVt
IGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0
byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29v
a2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBm
b3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdf
bGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4
LDExICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNr
X25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAv
LyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJh
c2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRo
ZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBh
dXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92
ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxl
dGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29r
aWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jv
b2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDhkZTcy
MmQ0NWJiYmFkZDU0ZDIzOWYyZTI3MWRlMTZjOTQ5MGQ1ZGIuLjc1MmZjNGMyODVhZDQyNmRkNDMx
NjJjOWQwNWJjNTU3ZDQwMzliMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAg
ICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bv
b2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnBy
b2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5w
cm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2Fn
ZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAg
ICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJN
ZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggZDg3YTRkZmVjNzk0ZjMxZGNiNjRlNWU5ZWY0
YmNlNGIxOGMxOTJhMi4uZmRmOWZkY2EwMTBmNGM1ZTE0ZTlkZGEyYjM0NGMyMzI2MzcwMGRhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw3IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwKICAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJf
cywgY29va2llLmh0dHBPbmx5KSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBP
bmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29r
aWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsK
IH0KQEAgLTE0MDksOCArMTQwOCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0
ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBT
dHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhv
c3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgp
LCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiB9CiAK
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uMDdhOWIzZTJkOWYwY2NkM2MxMmQ0ZTM2OTI2NzMzNGIyMjQwYjIwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQwLDEyICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAK
Ky8vIEZJWE1FOiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgaXMgdW5uZWVkZWQgbm93Lgor
Ly8gVGhpcyBpcyBqdXN0IGEgbGVmdG92ZXIgb24gQ29jb2EgcGxhdGZvcm1zIHdlIGFyZSB0cnlp
bmcgdG8gbW92ZSBhd2F5IGZyb20gYW5kIGRvZXMgbm90IG5lZWQgZWxlZ2FudCBBUEkgYWJzdHJh
Y3Rpb25zLgogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDog
cHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJs
aWM6CisgICAgc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgc2luZ2xl
dG9uKCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBp
bnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3By
aXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tD
dXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50Lm1tCmluZGV4IDE1MTIyOTA0NWYxM2U5Y2RkYmUwOTFlNjI3YmZhMWZl
MjA2ZGUyODkuLjE0ZDBiNmJkMWQ2ZTU1NTllYzdlNmIxYTJmYmE4MzFiYjM3YWI3YmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KQEAgLTEzOSw2ICsxMzksMTIgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCYgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OjpzaW5nbGV0b24oKQoreworICAgIE5ldmVyRGVzdHJveWVkPExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKIHZvaWQgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0
KQogewogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IGNvcmVSZXF1ZXN0Lm5zVVJMUmVxdWVz
dChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRl
eCA5ZjViZjBkYWZmZjJlNzQ4NDgzM2Q4ZmM0OWM5ZTlhODc3NDkyYzBkLi41ZGU2NDZkMzExMzVh
NWM5OTQ4MTYyNDBkYzI4Yzk4Zjc1OGUyODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsNyBA
QCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyBoZXJlLgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFs
dWUoKSkKQEAgLTE2Niw4ICsxNjUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAg
ICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZP
Uk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklP
UklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ4MCwyMiArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkg
PSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlv
bjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklP
U0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAg
ICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAg
ICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3Nl
cigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdG
b3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5
OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQot
ICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5l
dHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVz
c01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUwNiwxNyArNDg3LDExIEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNI
VFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2Vd
KTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVk
VmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFi
bGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJs
ZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRh
dGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVu
Y2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojph
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5n
ZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQ
ZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpA
QCAtNTk1LDExICs1NzAsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRl
ci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIu
dmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1
cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdl
YlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2Qw
ZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRk
OGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDAp
OworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93
bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAt
MTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGlu
Z1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5Ojpw
dWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElE
LCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
aGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5k
Ym94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRp
ZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9h
ZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQor
ICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwg
Y2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29u
bmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgq
dGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0Niwx
NSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29s
LT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3Nl
ZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVk
aXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90
ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1f
ZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQ
cm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxv
YWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5
ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAg
IG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVz
dCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxv
YWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25X
aXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6
ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3
cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNz
UG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5h
bWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBk
ZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAot
ICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwor
ICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3du
bG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3Jp
dGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAK
aW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZj
NjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyAr
NDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2Fk
UHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vzcyht
YWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0Vu
dGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkK
ICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZv
cm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVy
QmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91
bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3By
b2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3Vu
ZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94
eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAg
ICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9u
PihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNz
ZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rv
d25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJv
Y2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJL
aXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2lu
Zyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQ
cm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBk
b3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsK
IAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29r
ICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQ
cm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94
eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAg
bV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJ
RCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmlu
aXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExv
YWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3du
bG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERv
d25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9j
ZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlu
cyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRv
d25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3du
bG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxv
YWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0Rp
ZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJv
Y2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsK
KyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRv
d25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rv
d25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNz
ZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJ
UHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBk
b3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsK
LQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZh
MDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
cHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1h
cDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAg
Ym9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLjIwNzRiNmM2M2EyMDJm
NmI3NjQ3YWM2YWM4ZDU5ZTlmZGI1OTA3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0
NCwyOCBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Ojpz
aW5nbGV0b24oKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3Qp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJv
dG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9j
b2xJRCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyNlbmRpZgog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpLmludmFs
aWRhdGUoKnRoaXMpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcAppbmRleCBkMTI1MDIwYTU5NWQyOTg4OTY5M2I0MjMwYzEwMWQ4MzI0M2FlM2JlLi43
ZjkwMmQ4NTgzZTczMDU2NGU5MWY5NjM2MTc2NDMyMjJlZjczOTE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBA
IC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Miw3IEBACiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUg
PHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzczLDEwNyBAQAog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIK
KyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNL
X0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQot
ICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQ
cm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdv
cmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0
d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpu
ZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworCit2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVs
YXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vz
c1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgaWYgKHBlbmRp
bmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogRG8g
c29tZXRoaW5nIGhlcmUuCit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0
aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9y
IGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNo
b3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVj
ayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2Fs
bE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVt
ZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9y
YWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwg
cGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAg
IGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJh
bWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
RnJvbUFsbFN0b3JlcygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBh
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNz
ZXJ0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1By
b2Nlc3NQcm94eSgpCisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xB
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgq
dGhpcykKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBh
bnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1f
Y29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAg
ICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsK
KyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsxODgsNyBAQCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9h
ZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAg
ICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsxOTYsMTIgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVy
OjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJv
Y2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
ZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9w
dGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAg
ICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRp
b25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAg
ICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNTQsMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkK
ICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRl
cygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0
IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhp
cyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRl
cygpCkBAIC0yNTgsOSArMzQ2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAo
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1OSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
bWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAg
ICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzQsMTEgKzQxNyw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9y
aWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewot
ICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3Zl
KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRv
cE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTUsMTEgKzQ3Myw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hl
ciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+
Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA2LDcgKzEyNzksOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAKQEAgLTEyNzEsMTQgKzEzNDUsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRTeW5jQWxsQ29va2llcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUp
CiB7CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9
LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9y
ZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9u
SUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9y
ZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5
bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTEyOTEsMTYgKzEzNjUsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
CiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3Jl
RnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Np
b25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlm
ICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAg
ICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0
cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAg
LTEzNDcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdp
c3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVE
b21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVl
ZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTEwLDE2ICsx
NTc1LDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQ
YWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHBy
b2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQ
cm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQ
cm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVBy
b2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9
IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3Vu
ZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNr
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFj
a2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTQwOTQwNDE2NTA4NWEyOGY2MjgwNTgyZjFm
NDA1MjRiNzk1ZDk0Mi4uYzY5YWU2MzEzYTNkZDBlMmFkNTU4Yjg3ZjM1ZWZjZmYzMzNjODYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgKQEAgLTUyLDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9y
bURhdGFSZWZlcmVuY2U7CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsK
IH0KQEAgLTczLDggKzc3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2Fk
UHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3MgOiBib29sOwpAQCAtODcsNyArOTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVj
dCBXZWJzaXRlRGF0YTsKIAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1Ymxp
YyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwg
cHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdv
cmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2
YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiwgcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJh
YmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNiwx
NiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5
KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0
ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMDUsMTMgKzIxMywxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90
dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lk
IHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBh
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCk7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMzLDgg
QEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0
b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCk7CisgICAgCiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVx
dWVzdChXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsK
QEAgLTI0NCw3ICsyNTIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgY2xlYXJCdW5kbGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nv
b2tpZU1hbmFnZXIuZ2V0KCk7IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5KCk7CisKKyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKTsKKyAgICBzdGF0aWMgdm9pZCBhdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3Nh
cnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlBy
b2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7
CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vz
c05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTIs
NyArMjY3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNv
bm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpD
b25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQKQEAgLTMwOCw4ICszMjIsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9j
ZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQ
b29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFz
aE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxl
dGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0Nh
bGxiYWNrczsKQEAgLTM0Nyw2ICszNTksOCBAQCBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKICNlbmRpZgorCisg
ICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmVi
YTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjgyYzEwZTQxZDU2MjVkYmFhZGY5MTNiOTQ4
MDQ0N2M3MGNjMTlkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMCBA
QCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZl
bnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hT
ZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBD
RW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7Cisg
ICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6
OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAg
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5k
cG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAK
aW5kZXggNDAxODYwZDIwYzI3ODc2ZWM0MDgyNzU0YzVmMGIyZDZiMzc1YWYzNi4uZDgxNjBiMDBi
ZTQ2NGI2NDEyZTg4Njc3MDY5YjY5OWE4YmM4NmVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5
TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0
d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAi
V2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4g
V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29s
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9j
ZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxl
bWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bv
b2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29v
a2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5h
Z2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAK
LS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJz
OwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMo
KSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAg
ICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8q
IG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3ll
ZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5
KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShO
ZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19
Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50
KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNl
c3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25J
RCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJh
Y2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQp
LCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpE
ZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1l
IHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25J
RCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNl
c3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29r
aWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2Fs
bGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vz
c2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlv
bigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tp
ZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxD
b29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29r
aWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248
dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwyMiArMTg2LDE4IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24o
KSkKLSAgICAgICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRp
ZgotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJv
Y2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBD
b29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4
IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4
OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJp
Y0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2Nl
cHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVN
YW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpD
b29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
c3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5
PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2Vzcykp
OyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGlu
aXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0
LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAog
cHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9p
ZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRT
dXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldl
YkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29v
a2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2
ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJv
eHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1f
Y2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCBiZjYxMDk3MjZlY2Y3NDg0Yjc2Y2QzMGZiYTQ3NDg2NDhiYzdmNTAxLi5h
ZGNiYzM5NWViMDg5NjI2NGFhMGUxZDZhNmE0YTIxMzkwNDY0NDViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3MTYsNyArMTcxNiw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxl
ZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vz
c2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lv
bklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMxNzAsMTEgKzMxNzAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2Vy
RW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQog
CkBAIC0zMTgzLDEzICszMTc5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdv
cmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2
aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQzODksNyArNDM3OSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRl
bnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lv
bklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9u
SUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sIGNhblVz
ZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyMyw3ICs0NzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJ
bmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewog
ICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlj
a0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRl
c3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01
MzM1LDcgKzUzMjUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRI
b3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09
IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VV
UkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUu
aXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50
TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIp
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxl
RG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1Jl
ZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUlu
aXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTk5MjksNTggKzk5MTksMjcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2Vi
Q29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IGEzYmNkNGQyODg1NmE1ZjAzOTg2ZmY5OWE0Y2NmNWVmMjczOWE5MTkuLjRlNWZh
MzRkMDcyZmI5OGJhNjI2NzU1ZTEzOTcwYWQ0MjQ3OGM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgog
CiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMj
X19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhj
aGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoi
IGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVs
LCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiAr
MjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAor
VmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVm
YXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBA
IFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVl
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1h
a2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9y
ZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VH
cmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3
YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTog
VGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNl
aXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAg
ICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRT
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nl
c3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0
RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNz
ZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAy
LDIxICs0MDEsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0
aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoZW5hYmxlZCkpOwor
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkKGVuYWJsZWQpKTsKICNlbmRpZgogfQogCkBAIC00MjksMTEgKzQxOSw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2lu
Z1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29u
bmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9p
ZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQp
LT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQ0Myw4ICs0MjgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNF
KFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ1Nyw3ICs0NDEsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxL
ZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNz
dXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCkpOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NN
YW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsK
ICNlbmRpZgpAQCAtNDgyLDI3NSArNDY3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVu
UHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUq
IHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
YXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNr
IG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxs
T25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQ
cm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBj
b3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29u
ZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3Vy
Y2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0
cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05v
QWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioq
KioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0
dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGlu
ZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAg
Ly8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnkg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7
Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
RXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0g
ICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVw
Z3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUg
PyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5Owot
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShs
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNh
Y2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdl
RGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBl
bHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9y
eTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxs
OwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwot
ICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNB
cHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0g
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAg
IH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYm
ICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgp
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAg
ICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJP
cmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5l
dHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0
b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFn
ZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdl
RGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhz
dHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRv
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVy
cygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAg
ICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAg
ICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkp
Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgp
OwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklD
RSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVy
bmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAg
ICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0g
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNs
dWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJv
dW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQot
ICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAw
KTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBu
ZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3Jr
UHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRl
RGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYo
KndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5j
bGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3
b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiBy
ZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDog
bV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nl
c3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25l
dHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3
b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBs
ZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5l
dHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTksOSArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQ
cm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0
aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94
eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVl
cnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0
cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc3MiwyMCArNDg3
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdl
YlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1By
b3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlBy
b2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9j
ZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUo
cmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5M
SUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8u
aWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAg
ICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RG
TW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJl
cGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVu
dGlmaWVyKQogewpAQCAtODA5LDIzICs1MTAsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0K
IH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiBy
ZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChw
cm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFT
dG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9u
SUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAo
IXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
ZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkp
OwogCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0
cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ug
d29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVsw
XTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1f
cHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nl
c3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9
PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9j
ZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgm
cHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC04MzMsMzUgKzUzNywzNSBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJv
bGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2Vy
Q29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAg
ICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtl
ciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVz
aW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHBy
b2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVh
dGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3
ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9j
ZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShy
ZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcg
c2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RB
VElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2Vz
PSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAg
bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHBy
b2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNp
dGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdU
Rk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAg
ICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQo
KnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFn
ZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVz
dGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1
ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9y
ZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVG
cm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0g
ICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0g
ICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkzMCw3
ICs2MzQsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFr
ZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBz
YW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJv
Y2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVz
ZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAg
aWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURh
dGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5h
YmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTA0MCw4ICs3NDQs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2
ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0
eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBh
cmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVu
ZGxlUGF0aDsKQEAgLTEyMDYsOSArOTA4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vz
c0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHBy
b2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBt
X2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJD
b25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3Mp
CkBAIC0xMzAzLDEwICsxMDAyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBpZiAo
IXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8gV2Ug
dHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBw
b3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRl
IGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2
ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdl
YnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQcm9j
ZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzM3LDcgKzEwMzMsNyBAQCBSZWY8V2ViUGFnZVByb3h5
PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBS
ZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID0g
cGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVuY2Vz
U3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVzZXJD
b250ZW50Q29udHJvbGxlcikKQEAgLTEzNjQsNyArMTA2MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQp
CiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0gICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29ya2Vy
VXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEzNzMs
MTUgKzEwNjksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVzdWx0
ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhhc2hT
ZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdlSUQp
OwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBh
dXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJU
KCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNl
c3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVhclBl
bmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDksNyArMTA5Niw2IEBA
IGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpk
b3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlh
dGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93
bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAg
IE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpAQCAt
MTQxNywyNiArMTEwMywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxv
YWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogICAgICAgICBpc0Fw
cEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVz
dCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2Yg
dGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9w
IGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAg
ICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRp
bmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1
YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICgh
dXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdl
bnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5p
dGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChX
ZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91
bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5
OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBS
ZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVS
TCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRv
cCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAg
ICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2Ut
PnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJz
dFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1Bh
Z2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnQo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZh
bHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRI
VFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQor
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVx
dWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1
cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0NCwxNyArMTEyNywxMiBAQCBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURv
d25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0
aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0
b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgs
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNl
KCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNz
aW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVy
ZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MjMsMTEgKzEyMDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6
cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFBy
b2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAt
MTU0MiwxNCArMTIxNSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjphY3RpdmVQYWdlc09yaWdp
bnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCBwaWQsIENvbQogICAgIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3Jr
ZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCit2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcykKIHsKLSAgICBzZW5k
U3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHko
KSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoKQogewotICAgIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nOjpSZXBseSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAg
Ly8gc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbHdheXNVc2VzQ29tcGxleFRl
eHRDb2RlUGF0aChib29sIGFsd2F5c1VzZUNvbXBsZXhUZXh0KQpAQCAtMTU3NCwxNCArMTI0OSwx
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0
IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJl
KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICAv
LyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVy
bFNjaGVtZSkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVt
ZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICAvLyBGSVhN
RTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJs
U2NoZW1lKQpAQCAtMTU5NCwxNCArMTI3MSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsKHVybFNjaGVtZSkpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAv
LyBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVt
ZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAg
ICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0
ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjIyLDEwICsxMzAxLDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0
d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAt
MTYzNCwxMCArMTMxMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxV
UkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJl
bW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAg
Zm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29y
a1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJs
U2NoZW1lKQpAQCAtMTY3MSwxNiArMTM0NiwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
YWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOwor
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVN
b2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcg
aGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0
SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2OTAsMTIgKzEzNjMsMTIgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25z
dCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUlu
Zm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogewotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1l
c3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc2Niw0NyArMTQzOSwyMiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKLXsKLSAg
ICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0d29ya1By
b2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0
ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBs
eSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscygpLCAwKTsKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKQEAgLTE4
MTgsNTUgKzE0NjYsNDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29u
dGVudFByb2Nlc3NlcygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vz
c1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5n
KCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3Vt
ZSgpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3
aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1f
c2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsK
KyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtl
cnMoKTsKICNlbmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29ya1Byb2Nl
c3NDb29raWVzKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29raWVz
KCk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVwbHkoKSk7CisgICAgLy8g
RklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlOjpSZXBseSgpKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVBy
aXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2Fj
eVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGhlcmUuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNl
cnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRv
bWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKQEAgLTIxNDMsMTUgKzE3ODUsMTkgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1
aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJv
eHk+JiBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3Nl
czsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29w
IHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVw
ZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fz
c2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTYxLDcgKzE4MDcsNyBAQCBib29sIFdl
YlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBX
VEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBh
Z2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzODUsMTAgKzIwMzEsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNm
ZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
d2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURv
bWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3
ZWJQYWdlSUQpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQpAQCAtMjQ0MSwyNyArMjA4NCwyOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVB
U0VfTE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBz
X3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3Jr
ZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAg
ICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0
byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggNjk2OTYzMmE2YmU0ZDI4
OWI1MzgzZjE0YTU0MGNlODNhNWQ2MWEzMi4uYTEzNGNiMjBjNDNjYjk2NDhkY2FjNzdmYjhlYjA5
YjEwNjkzZmI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBA
IC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0
b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdh
Y3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9u
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZv
aWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBj
b25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsg
cmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCk7IH0KQEAgLTE5MSwxNyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hl
Y2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1By
b3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nl
c3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9y
IE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVs
LiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiog
bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYg
bWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8g
V2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQg
cHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9j
ZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdl
dCgpOyB9CkBAIC0yMDksOSArMTk5LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhl
IHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRl
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxX
ZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCAr
MjQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1h
dGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMs
IEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1
Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAg
IFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZl
UGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRT
ZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwogCkBAIC0zMDksOCArMjk0LDYgQEAgcHVi
bGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQo
KSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAq
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNz
IHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFn
ZUNvdW50OwpAQCAtMzE4LDkgKzMwMSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBT
dGF0aXN0aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZv
aWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtMzk5LDE5ICszNzksMTMgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdp
dGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9
CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwog
Ci0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVs
YXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVBy
b3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZv
aWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3Jr
ZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMu
Y29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0Nv
dW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXpl
KCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdv
cmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdDsKQEAgLTUzOCw4ICs1MTIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4g
bV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYg
RU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0No
YW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRp
b25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTU2LDYgKzUzMCwxNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09i
amVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0
YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0
d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENh
Y2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGly
ZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZSgpOwogCkBAIC01NjksOCArNTU0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkm
IGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6
SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9p
ZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0
b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQ
cmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25z
dCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVz
ZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4m
Jik7CiAKQEAgLTU5NCwxNCArNTc3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1Npbmds
ZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVX
ZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsK
LSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlm
Ci0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2Jz
ZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBA
IC02NDMsOSArNjE4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBX
ZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3
ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1By
b3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2Fp
dGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAg
ICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVm
ZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxV
c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklE
Rm9yU2VydmljZVdvcmtlcjsKQEAgLTY2MSw3ICs2MzUsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAg
ICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5
Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0
b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY5Myw4ICs2NjYsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAg
ICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4s
IFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJD
b250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MjksOCArNzAwLDYgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1By
b2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNr
Pj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MzYsNyArODA1
LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVu
Y2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uOwpAQCAtODQ3LDIwICs4MTYsNiBAQCBwcml2YXRlOgogI2VuZGlm
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8
VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1YjNjNTRlNTg3ZmNj
NWI4OTM5NjhiNjE2OTFiZmI4OGNlY2YwNTc4Li5mZWQ3YjIyNjI5OGY2ODA4YmJlODNjMGZkZWVk
NWExYjI5YTI3MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5
JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJl
cGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW0KaW5kZXggZmIzYjIxZmQ5MzYyOGEzNGFlM2Q0ZGVjZmQ0ZTc5N2NmNjUz
MWY2NS4uMTE3NjQwNmE4ZTJkZjM0NzBlNGVkNmM0YTQxYjgzMTg1ZTg5OTE5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0
ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVj
a3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hV
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBv
cnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CkBAIC01NTksNCArNTYxLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogICAgIGluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoRm9yY2VSZWlu
aXRpYWxpemF0aW9uOjpZZXMpOwogfQogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQp
Cit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggYjlmYjg5NTkxNDg0YWQ2MTYxZWRhODUzNjhjNjI2
ZDkwYWRiZmQ4Zi4uNWU4ZjhiNmVlNDFmZjc1NjBkYmNmNjM1MTQ3MGJlZGViMmNmOTA2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5j
bHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBA
QAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMjMgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFs
bG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMg
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0
YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9y
ZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCisvLyBGSVhNRTogUmVw
bGFjZSB0aGlzIHdpdGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0b3Jlcy4KK1ZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zy
b21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
YWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
YWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQo
c3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vz
c2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsMTAgKzEzMCwx
MSBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9j
ZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZv
cm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6
On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTQ0LDEyIEBAIFdlYnNpdGVEYXRhU3Rv
cmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAg
aWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9
PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9u
SUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAg
IGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQot
ICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVBy
b2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94
eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsx
ODAsMzIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkK
ICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQordm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQoreworICAgIGF1dG8gcmVzdWx0
ID0gYWxsRGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSog
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVs
dERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVz
KCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsK
KyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICBtX25l
dHdvcmtQcm9jZXNzID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmNyZWF0ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsK
IH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQ
cm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjIxLDYgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAg
ICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vi
c2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17
Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNF
bXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAo
bV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0NjIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJz
aXN0ZW50KCkpOwogICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkgOiBwcm9jZXNzUG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBj
b3JyZWN0IHRvIGl0ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC00NTgsNyArNDc3LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25z
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURh
dGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpAQCAtNzI2LDE1ICs3NDUsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBhdXRv
IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5
cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAg
ICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nl
c3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwor
ICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSBwb29s
cyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpOb25lOgpAQCAtNzQyLDcgKzc2MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1l
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVu
ZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5j
ZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAg
ICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTg5
MywxNCArOTExLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlm
eU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxs
YmFjaygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0LDEyICsxMDA3LDEwIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUp
IHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgot
ICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMzIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3RO
YW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBI
U1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRv
ciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTEx
ODUsOCArMTE5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4
U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTExOTUsOCArMTIwNSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRh
cmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25U
byhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3du
VG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTIwNSw4ICsxMjE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTUsMjAgKzEyMjMsMTMgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjQwLDEyICsxMjQxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU3LDEyICsxMjUzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dy
YW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyNzYsOCArMTI2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkxLDEwICsxMjgxLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVu
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA2LDEyICsxMjkzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjUsMTAg
KzEzMDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzM3LDggKzEzMTYsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1
YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUyLDIyICsxMzMwLDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM4MSwyMyArMTM1MSwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJs
UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNDExLDEwICsxMzcyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjYsMTIgKzEzODQsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ0MywxMiArMTM5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NjAsMjUgKzE0MDgsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0OTAsNDYgKzE0MjcsMjcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwg
W10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9z
ZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2Rp
ZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3Jh
bmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTYxLDM1ICsxNDc5LDI0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFT
dW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvCiAKICAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdh
dG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9y
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBjYWxsIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YUltbWVkaWF0ZWx5IGhlcmUuCisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmIGRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92
ZShkYXRhKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hv
dWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7
IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tp
bmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1
OTgsMjQgKzE1MDUsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRp
c3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjI3LDIyICsxNTIzLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBj
b25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50
ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5k
ZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25l
ZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NTQsMTAgKzE1NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BG
cgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdl
U3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhh
ZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhl
cmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIg
fSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVj
b3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NjksMTggKzE1NTQsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODgsOCArMTU2OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
IGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMCw3ICsxNTgwLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcwOCw4
ICsxNTg4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTcyMywxMCArMTYwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOCwxMyArMTYxNCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBV
UkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3NTYsMTMgKzE2MjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzYsMTAgKzE2
NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MywxMCArMTY1
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDUsMTAg
KzE2NjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21V
UkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MTcsNjIgKzE2NzIsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5o
YXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpAQCAtMTkwMywxMCArMTczNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
CiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUo
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1f
c2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSht
X3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxNCwxMCAr
MTc0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxl
ZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJD
b3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxh
ZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTI1LDIwICsxNzUwLDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0
byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwm
IGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTUwLDggKzE3NjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJz
dFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjMsOCArMTc4MSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURv
bWFpbkZvclRlc3RpbmcoCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
I2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTE5NzMsOCAr
MTc5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMTk4NiwyMiArMTgwMiwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUg
PSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6
ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
cHJvY2Vzc1Bvb2xzOwpAQCAtMjAxNiw5ICsxODIyLDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBj
b24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHBy
b2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0
KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEzNiwxNyArMTkzOSwxNSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5h
YmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7
CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1f
c2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNz
ZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNz
aW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQs
IGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNz
YWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2Up
LCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxNTgsOCArMTk1OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNr
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQo
dHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAw
KTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7CkBAIC0yMTc4LDggKzE5NzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0
aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vz
c2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwg
ZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0y
MTk0LDIwICsxOTkzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAg
IG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpA
QCAtMjIyOSwyOSArMjAyMyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYK
IAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsm
Y29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29v
a2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFk
ZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQ
ZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYg
ZnVuY3Rpb24pCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpA
QCAtMjI3NSw4ICsyMDQ2LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2Fy
eSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7
Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3Vy
YXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAg
ICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM4
MSw3ICsyMTUwLDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1l
dGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24o
KTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29raWVN
YW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwg
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0y
NDExLDEwICsyMTg3LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6
OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0
b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDIyLDIz
ICsyMTk0LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9z
ZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpCkBAIC0yNDY0LDcgKzIyMjgsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRw
M0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNp
dGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0
IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShD
T0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjQ3NiwzNCArMjI0
NSwyMSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNo
U2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBC
b3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3Vu
ZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRo
aXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmFk
ZFNlc3Npb24oKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yNTI2LDcg
KzIyODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNU
b0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91
bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlu
cyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQog
ICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMp
OwogfQogCkBAIC0yNTM0LDEwICsyMjkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRB
cHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
bV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5k
aWYKIApAQCAtMjU0NSwxNiArMjI5OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJv
Y2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAyZWNmNGQ5ZTI1YzM0NGY0YWJi
MTljMWQxNjMxMDU5Nzk2M2ZmMmM2Li5mZThhNTI4NWY0MTRmODEyNDhhN2ZjZmQ0OWNlYzZkZDRl
YmJmOGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwog
Y2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJQYWdlUHJveHk7
CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKQEAgLTEwOCw3ICsxMDksMTAgQEAgcHVibGljOgogICAg
IFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQ
QUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBX
ZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNz
KCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKwor
ICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25J
RChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIyOSwxNSArMjMzLDgg
QEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNh
bHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQog
Ci0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikg
Y29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7Ci0K
LSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAg
IHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lk
IHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBj
bGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAgIHZvaWQgZGlzcGF0
Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKQEAgLTI2Miw4ICsyNTksNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdlYkNv
cmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAotICAg
IHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1cmF0
aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjczLDYgKzI2OCw4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgYm9v
bCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
KwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNDUsNyArMzQyLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBj
b25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQg
bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIE9wdGlvbmFs
PEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZklu
aXRpYWxpemVkKCk7CkBAIC0zODMsOCArMzgwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAg
SGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vh
a0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0
cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MDUsNiArNDAwLDcgQEAgcHJpdmF0
ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAg
ICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9T
U08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9y
aXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRl
eCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4ZWU5MzQyLi41YmEzOTAwZDJkYWZm
MDU2YWJkMGNkZjA1N2FlMzI4NTRlYmZlY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVT
b3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3Jt
U2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0
byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7
CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQs
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAg
IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRl
eCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3
NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAg
ICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3Rv
cmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQ
cm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYg
Y3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNz
UG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wt
PndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2Qw
YTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uMDg5MjhmY2QzMTZkODhmOWQ1MTUwMGVjNjg0YWQx
YjY0YWY4YTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyArMzUs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklE
LCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcw
OTcxMWRmZDZjMTM0MTU3MzJiZGFjLi4wNzkzZWQ1MTM5MTUyOGQ5YjRiOWZkYjBmNGFkM2M4OTYw
ZmRhNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nl
c3NQb29sU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVs
dFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0
aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVE
YXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3Zl
ZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25l
dHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9y
ZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENv
b2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdu
b3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExh
bmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5
U2V0dGluZ3M7CiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9y
ZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsK
LSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRM
U0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNF
cnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykK
IHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRp
bmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1By
b3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI4NTUxZmYzZjAxZDJlOTIxZDk4YzEyYjAxYjg2NWI5ZDRi
ZDZmM2EuLjllNTE2NmU3YThlZTNmZjkwZGM2YTkzZTExNGQ3NzU3ZWIxMmY5NzAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBA
QAorMjAyMC0wOS0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQ
cm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFz
aWMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBD
b29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisKIDIwMjAtMDgtMzEgIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRjb3Jl
cHldIFJlZ2lzdGVyIGFub3RoZXIgcGFja2FnZSBpbiB0aGUgV2ViS2l0IHJlcG9zaXRvcnkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4
IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjE1Zjg2YWVkM2Q2MzAy
YzFiNTM3NWUxMjdkNjA0MTJmNjA0OTAyZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMTQ2LDggKzE0Niw4IEBAIFRFU1QoV2Vi
S2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29u
c3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUg
dGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3Jr
IHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1
bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAgICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmddOworICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENy
YXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4
IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRlYjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVk
NmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVmZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDks
NyArNDksNyBAQCBzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1l
c3NhZ2U7CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5U
ZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIg
PSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0p
OwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
KQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25E
aXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAg
ICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0
b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNV
UkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFz
ZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0
aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmls
ZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0g
PT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBp
cyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAg
ICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZl
cnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlz
dGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRl
RGlyZWN0b3JpZXMoU3RyaW5nIHRlc3ROYW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZp
bGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgp
OworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmls
ZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIy
ODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywx
NCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29s
ICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBo
YXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxl
c3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVu
dCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAg
ICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJd
KTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLjhj
MmJlMWJlOGI2Yjk2MDA3Y2EwNjk3NWU2OGQ4MjI3YzY3ZTU2MTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW0KQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2Ft
ZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5
V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0g
aXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tX
ZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0
YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07
CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNF
KFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsK
QEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFj
Y2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1
bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtk
ZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpm
aWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5h
Z2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RV
Ukw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBf
aW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNl
XTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNd
OwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRlOWY4Zi4uZjg1MzZl
MmQzOGU4MWMyYjhlNTBkMTYyNzU5N2Q5NWM3NzQ5OWYwNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVy
cmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dV
c2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJN
ZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNl
ckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwog
CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9y
YWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVm
YXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBz
ZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQog
ICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNl
V29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29u
ZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFs
UHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9u
ZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBT
ZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhl
IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
Ll9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgy
dSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291
bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9j
ZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nl
c3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwg
b3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAg
ICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNE
YXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0g
dHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVu
Y2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
Ll93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29y
a2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2Vy
cywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9
IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwor
fQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0
TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2Vy
dmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mg
PSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBF
Q1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2
aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVD
VF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDky
YTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
QEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8g
RklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2ll
IGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBM
QVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBO
bywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
KQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91
dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRo
b3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0
Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBs
ZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24g
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBf
bWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0
ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdl
ID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21l
c3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAg
cmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRD
b29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50
LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBp
ICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsg
YWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1Qo
V2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJv
Y2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tp
ZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8i
LAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRD
b29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlv
bkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAg
IFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tp
ZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1d
OworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lv
bkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwg
V2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tX
ZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURh
dGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNU
KFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0g
ZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52
YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsg
aSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0o
KTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4i
OwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRp
YyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUg
KnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXgg
MjEzZWZlMWZhMTEwYWIyZmY0YTIyMTM4YmMxNzk1NGQ0YTA4YzQxNS4uZjllMDMzZDY3ZTUwNzZl
NDY3N2NkYjk2ZWNjMGIzYWE3OGE5ZDA0MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTEwNjcsOCArMTA2Nyw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMs
IFJlCiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVl
KTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0zMTc0LDkgKzMxNzIsOCBAQCBQbGF0Zm9ybVdlYlZp
ZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZp
ZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24s
IG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRq
dXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJl
ZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNv
bnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0Owog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408733</attachid>
            <date>2020-09-14 12:15:43 -0700</date>
            <delta_ts>2020-09-15 13:23:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200914121542.patch</filename>
            <type>text/plain</type>
            <size>314948</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0YzhlMzNhMjFmZWRkOWYz
OWIwOTJiNDg4ODI5OGY0ZjU0NDk2MDYuLjlmMWQ5YjYzMzBjZThlZGE3MGNlN2ViM2ZlY2ZkYzBm
OTJhY2RkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTEg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIF9zZXRDb29raWVBY2NlcHRQb2xpY3kgdG8gV0tIVFRQQ29va2llU3RvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAppbmRleCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5l
YjU4ZmM5NDVkMTkyNTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCku
Y29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5z
dG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2ll
QWNjZXB0UG9saWN5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTBlYjYyYzZh
OTdjNTc4YWQ4MGNiYjBjZDAwZGU1ODMwOWQxMjRmNi4uYWJiYWUyM2MzNzE1NzI0ZWQ2MjU2MGVl
OTcxZTkwNjRmMzdlNTAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYmCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5l
bmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246
OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFy
YW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0g
ZGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwor
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRl
cnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERh
dGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6
OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBh
cmFtZXRlcnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2
aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFk
ZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9y
ZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9y
ZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1
dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRv
JiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVu
dC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTQyNywxMiArNDE3LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lk
ZW50aWZpZXIgaWRlbnQKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50
aWFscygpCiB7Ci0gICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2Uo
KS5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhp
cy0+bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpCi0g
ICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgZWxzZQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
XSAoYXV0byYgbmV0d29ya1Nlc3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Np
b24gPSBuZXR3b3JrU2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgICAg
IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsK
QEAgLTUwOSw4ICs0OTMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBi
b29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29y
a1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjUsNyArNTA3LDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRp
ZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihj
cmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxz
ZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVy
LmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VD
b29raWVBUEkoKSkgewpAQCAtNTQ4LDIxICs1MzAsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGlj
eSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3Rv
cmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAg
ICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0g
ICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0
d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAg
ICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYp
PiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAg
ICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZh
bHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMjdmNjBjMWJkMTIx
ZDZkMzFjNGNkY2JiMjU3M2ZkZmM5ZGYwNjYyMC4uYzdkZDQ3YzdiYjhiYjhhNDk0Y2Y2MmRmNjM0
NGZiZTA5YjBiZDJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFj
aE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5l
d1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc2LDcgKzM3NSw2IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVh
dGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5l
dHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApA
QCAtNTQ2LDcgKzU0NCw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBt
X3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmlu
ZGV4IDcwZDM3NmZhOTY0NmQwZWZmNjE2MmI1OWUxNjVlZjFmNjBhOGJhYzEuLmNmNmY0YWI4YmZk
NWEyNTA5YzkzMzI0ODUwYmRjOTY2M2M0YzRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwg
c3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsK
ICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBl
bmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTY5LDkgKzY5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBl
bmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSA8PCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
OwotI2VuZGlmCiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKICAgICBl
bmNvZGVyIDw8IGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0KQEAgLTExOSwx
MSArMTE2LDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCi0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBP
cHRpb25hbDxWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOworICAgIGRlY29kZXIgPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRh
dGFTdG9yZVBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycyk7CisgICAgcmVzdWx0LmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3Rv
cmVQYXJhbWV0ZXJzKTsKIAogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCkBAIC0xNDUsMjAgKzE0Miw2IEBAIGJvb2wgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAo
IXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAxYjliM2RhZWQxY2NlYWI1ZDRm
ZmMzMDUwMjg5ZTE1YmY4ODkxOGU1Li4wNGQ4NGI3ZDA4ZTFjZWM0NGRlOTQ2YmIwMmQyNmI3MmMx
MmQwZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC03Miw3ICs3Miw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzdG9y
YWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQ
KQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04
NiwxMiArODYsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewog
ICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0
b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAg
IGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDlk
NzNlYTEyZjE0OGE3OGFiMzQ0NjljYWI4NjIxZDdjN2Q1ZDQ3NzguLjI0OWFlZDRiZTMzMmRjYzZj
MWQyYWQ1ZjZkZTdhZWI4Y2Y4MzViYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRi
b3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250
ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA3LDExICsxMDQs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
c0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVS
TENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBw
bGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05f
QVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5
YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNz
Q3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNv
bnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3Qp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3
MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3
ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1
ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0
YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVu
c2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQ
cm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYm
ICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkK
KyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VG
cm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50
aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RG
TW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0
d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24t
PnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
aW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5
NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0
MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNF
cnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vy
cm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNl
dFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMx
MjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFk
ODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2Rl
ciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNv
b2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nv
b2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlv
bmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFy
YW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29r
aWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29r
aWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmlu
Zz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVj
CiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRp
b25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUx
YjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUx
LDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8
dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmlu
ZGV4IGE1NmRmNWE4YzJiMjU4MjMzZDlkNDhiZGZkOTIwZDY4YTY3ZjIxZjcuLmViMDc5ODcwNDZm
NWYyNWEyNjYyOWVhY2YwYzM3ZDEzYzkyODUwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5h
bWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3Rv
cmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9y
TmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhU
VFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBD
b29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNT
RVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91
bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAg
ICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tp
ZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5n
ZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVz
KSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMp
IG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRD
b29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRh
YmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
b2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29r
aWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5w
cm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9v
bCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVs
dFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8g
TmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAg
ICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29v
a2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5n
RGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBj
b29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAg
ICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBt
X293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
OwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5z
ZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFT
dG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFn
ZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmlu
Z0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2ll
TWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29r
aWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAg
ICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQot
ICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7
Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2Vy
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAg
ICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0
ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhN
RTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3Jl
OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICgh
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAg
ICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUo
cG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1h
bmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBjbGFzcyBB
UElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA6IHB1YmxpYyBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6Ok9ic2VydmVyIHsKQEAgLTIyMiwyMSArMTUyLDcgQEAgdm9pZCBIVFRQQ29va2llU3Rv
cmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAg
ICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3Mg
aW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENo
YW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tp
ZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjcx
LDQ2ICsxODcsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQog
dm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBv
b2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1f
b3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQog
Ci12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVu
dGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhp
c10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHBy
b2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2ll
IHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVk
IHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29s
LnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lz
dGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3Rl
bmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50
aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCAwMzgwNWU2NDk3MGIzY2U5ZTM2MTA1
ZGU5ZjZlYTJhZDkyZjEzZmEyLi42M2IxZjUwZjI2OTJiMTllNjA4ODU2ZTA4YTZhY2FjNmM5NmZh
NDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5oCkBAIC04Miw5ICs4Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tp
ZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZv
ck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBn
ZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZv
aWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6
Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApp
bmRleCBkZjMxM2ZmYjg2ZmMxZWY3ZTczMWE1NDRkNTdjYjc0Y2QzMGQ0YWNkLi41MjYwNWM0ZTIz
OWI5MzMxMmVjYWI0ZDliYjUxOWM4ZDk2ZTkwOTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTM5OCwxMSArMzk4LDYgQEAgYm9vbCBXS0NvbnRl
eHRHZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNvbmZpZ3VyYXRpb24oKS51c2VzU2lu
Z2xlV2ViUHJvY2VzcygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFN0b3JhZ2VBY2Nlc3NBUElF
bmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIGVuYWJsZWQpCi17Ci0gICAgV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJs
ZWQpOwotfQotCiB2b2lkIFdLQ29udGV4dFNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbmFtZSkKIHsK
ICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKFdlYktpdDo6dG9JbXBsKG5hbWUpLT5zdHJpbmcoKSk7CkBAIC00
MjYsMTEgKzQyMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4
dFJlZiwgV0tVUkxSZWYpCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRD
b29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsKLX0KLQogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdL
Q29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQogewogICAgIHJldHVybiBX
S1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKCk7CkBAIC01NDgsMTggKzUzOCw2
IEBAIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRU
ZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCi12b2lk
IFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsK
LX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5I
YXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9B
UEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoKS5sZWFrUmVmKCkpOwpAQCAtNjAxLDExICs1NzksNiBAQCB2b2lkIFdLQ29udGV4dFNldEZv
bnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLQXJyYXlSZWYgYXJyYXlSZWYp
CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRBbGxvd0xpc3QoV2ViS2l0
Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTYxMyw3ICs1
ODYsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJl
ZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7
CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJy
YXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCkBAIC02NjEsMTIg
KzYzNCwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxT
dG9yYWdlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCB2bwogICAgIH0pOwogfQogCi12b2lkIFdL
Q29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQgV0tD
b250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3Jl
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURh
dGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250
ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRh
U3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKaW5k
ZXggMDhmNTRmZjUwNTdmOGQwNGUyNmFkZmUyYzBlM2E0NzI2NDc5MzVlNy4uNmY2Y2Q0MTdmYTg2
NWU2ZWE4ZDQ1YWMxYmYzNjJkYTgxNWQ5ZTIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2MiwxNSArMTYyLDEyIEBAIFdLX0VYUE9SVCB1bnNpZ25l
ZCBXS0NvbnRleHRHZXRNYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpIFdLCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhX
S0NvbnRleHRSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tDb250ZXh0R2V0VXNlc1Npbmds
ZVdlYlByb2Nlc3MoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0
U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tDb250ZXh0UmVmLCBib29sIGVuYWJsZWQpOwotCiBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLRG91YmxlUmVmIGludGVydmFsKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFN0
b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRl
RGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAKIFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7Ci1XS19FWFBPUlQgV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQp
IFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdL
X0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoV0tDb250
ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBX
S0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBX
S19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0
RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmgKaW5kZXggN2MyNzEwZjMzOWZjZTc3ZDNhNTJhOGE1NWU4YjFhZTZj
ZWI1NTdhNS4uYmE5NGJiMGJjZWE2MWI5NWQyZGZkYmI0OWU0MDczOTRhMDI4NmJkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAt
ODMsMTEgKzgzLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tD
b250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYsIGJvb2wpOwotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAv
LyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSB0ZXN0LgogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS0NvbnRleHRSZWYg
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA2M2ZhMjg0YTZlYzdlYTJkZTBhODFkMjE3MDVl
MDlmMTg4OGU3Yjc4Li5jNGQwNmE0MTgxMTJjN2Q0NmE2NGZmM2I0ZjI0M2U2OTIyMWYwOTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDI2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBX
S1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3Rv
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3Jl
YXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkp
OwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRh
U3RvcmUpLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7Cit9CisKK3ZvaWQgV0tXZWJzaXRlRGF0
YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpOworfQorCitib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Cit9
CisKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSwgYm9vbCBlbmFibGVkKQoreworICAgIFdlYktp
dDo6dG9JbXBsKGRhdGFTdG9yZSktPnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQp
OworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCog
Y29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCmluZGV4IGViODJmYWQ0NDY4ZjZmMzQ3YjBiZDhkNDYyNGZjNWFkNjVkNzk5OTcuLmQ0NzMz
MDk2MmM3NmQ5ZTM1ZDhiYTBiOWRlY2UxNzU1N2MwY2NhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC00Myw2
ICs0MywxMiBAQCBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFT
dG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdLV2VicwogCiBXS19FWFBPUlQgV0tIVFRQQ29v
a2llU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlR2V0SFRUUENvb2tpZVN0b3JlKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRh
U3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKK1dLX0VYUE9SVCBi
b29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlU2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSwgYm9vbCBlbmFibGVkKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVm
LCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0
aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0aW9uQ29u
dGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sLm1tCmluZGV4IGFjNzI4MGQ1ZTEwNTRhMjFkNzA1NjgzNDMxMmY4MTk2NDAxYzgzZTIu
LjQxNzljMDQ1NzI0YWQ5Y2JiMmQ0YTM5ZTE4OTBkMTM5NWJmMjdjMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC00MDcs
MjggKzQwNyw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlv
bmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5j
bGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19
Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQotewot
ICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3Byb2Nlc3NQ
b29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxl
dGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM2LDEyICs0
MTQsMTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIKIHsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVu
dGlmaWVyCkBAIC01NjIsMjggKzU0MCwxMSBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2ll
c0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAg
IF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxl
ZCk7CiB9CiAKLS0gKEJPT0wpX2lzU3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQKLXsKLSAgICByZXR1
cm4gX3Byb2Nlc3NQb29sLT5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgpOwotfQotCi0tICh2b2lk
KV9zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3Byb2Nl
c3NQb29sLT5zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKTsKLX0KLQogLSAodm9p
ZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCiB7CiAgICAgX3By
b2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0t
ICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wp
YWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5k
aWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25D
b3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MTYsMTEg
KzU3Nyw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFy
eShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1h
bmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVk
ZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVj
dGlvblNwYWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IDJiNTEzMDIyZTY1YzhmYTUyZGEwYTNl
ODNkZGZmNjI5YzllNTQ2YzUuLmFiNWM0NDI5ZDdkMjRjNDU3YWI0MzJlN2U1NWY1ZGU5NGRmMzY3
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC04NywxMCArODcsNiBAQAogLSAoX1dLRG93bmxvYWQg
KilfcmVzdW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0
YVN0b3JlOihXS1dlYnNpdGVEYXRhU3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICop
cGF0aCBvcmlnaW5hdGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5
LiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFy
ZSBydW5uaW5nLgotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2
b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
KSwgaW9zKDEyLjApKTsKIAogLy8gVGVzdCBvbmx5LgpAQCAtMTIyLDE0ICsxMTgsMTEgQEAKIC0g
KHZvaWQpX3ByZWNvbm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBt
YWNvcygxMC4xMy40LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8g
VGVzdCBvbmx5LgotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyOihCT09MKWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3Mo
MTEuMykpOwogLSAodm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVz
dGluZzoocGlkX3QpcGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9y
UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX2FsbG93
QW55VExTQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBh
cmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAu
MywgMTIuMikpOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1faXNTdG9yYWdlQWNjZXNz
QVBJRW5hYmxlZCwgc2V0dGVyPV9zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDopIEJPT0wgX3N0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlv
cygxMS4zKSk7CiAtICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tn
cm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IGVmOTBlOGJmNDg1MTNkYTcyMjljZTlmZDIyZjA3
ZjUxZmU1MTQ4YWUuLmY1OTlkZjc5ZGExOGI1YjQyOTJjMzc1NjQxM2JmZTg5NDg2YTg5OGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6
V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNv
cgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1l
bnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUK
IHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjYzLDQgKzY2OCwyNyBA
QCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFS
ZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2Nv
bXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9y
ZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJz
aXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggZmNjYzZiNTk3ZWYzNzdlN2MwNGQ5MmRiNjcw
YmQ0MTM1ZDg2MTFmNy4uNjgzZWE5Njc0YmU2NDkxYzkzM2NlZTMwODc0YmY1ZjQwNWFhZTJjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04Myw5ICs4MywxNiBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewog
CiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdO
YW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNp
dGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZv
aWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5mYjk4ZDA1
OTBjOWFkMjgyMzVkNzExYjdjYWFjOWJjNTVjOWE2NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAt
NjQsOCArNjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAg
IH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhk
YXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCks
IG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNl
dENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAog
ICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzEz
OCw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2ln
bmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFu
YWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7
CiB9CiAKQEAgLTE3Myw4ICsxNzAsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRf
cGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYg
KHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTg4LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
V2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUiht
YW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtd
KCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
R0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2Vi
Q29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFz
ay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9
CkBAIC0yNjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29r
aWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVm
KGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwot
Ci0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRl
IGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFj
Y2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAg
Y29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJv
Y2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNb
MF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNv
b2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFz
a19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwx
MSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0
Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9mYWls
KHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXco
bWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29v
a2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9u
IGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZy
b20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYg
cHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2ll
cykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBmb3Ig
KGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlz
dF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4LDEx
ICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVD
b29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUp
LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xl
YW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGZiMTJiMjE3
Nzc0ZjM5N2U1NmM3ZWYzN2QwMzQ5Y2Q1YzIwYTU0MmMuLmEyMjFiZTdkMzY2ZjhmM2QzNzZmMDFk
OTliNmUyNzk3NmRmNTBkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgc3RhdGlj
IHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9y
YWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wg
PSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nl
c3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9j
ZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYm
IG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAg
ICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNz
YWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjll
YmFlYTdkMzg2NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uCiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29r
aWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2Nh
bGxiYWNrXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRv
U3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBt
X3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBj
b29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRh
U3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVl
ZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJl
Zml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1
MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3
NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlh
cnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lk
IHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1
YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRh
YWY4NGMuLjNjNDI4NzJlMTVlMDNmNWFlNjEzM2JjNWE5MmFjMmFjODE4M2RmNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MCwxMiArNDAsMTUgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCisv
LyBGSVhNRTogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGlzIHVubmVlZGVkIG5vdy4KKy8v
IFRoaXMgaXMganVzdCBhIGxlZnRvdmVyIG9uIENvY29hIHBsYXRmb3JtcyB3ZSBhcmUgdHJ5aW5n
IHRvIG1vdmUgYXdheSBmcm9tIGFuZCBkb2VzIG5vdCBuZWVkIGFuIEFQSSBhYnN0cmFjdGlvbi4K
IGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgorcHVibGljOgorICAg
IHN0YXRpYyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIHNpbmdsZXRvbigpOwog
ICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikg
ZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQgaW52YWxpZGF0
ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitwcml2YXRlOgog
ICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJv
dG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5tbQppbmRleCAxNTEyMjkwNDVmMTNlOWNkZGJlMDkxZTYyN2JmYTFmZTIwNmRlMjg5
Li4xNGQwYjZiZDFkNmU1NTU5ZWM3ZTZiMWEyZmJhODMxYmIzN2FiN2JkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCkBAIC0xMzksNiArMTM5LDEyIEBACiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQmIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xl
dG9uKCkKK3sKKyAgICBOZXZlckRlc3Ryb3llZDxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IGNsaWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjb3JlUmVxdWVzdCkKIHsKICAg
ICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBjb3JlUmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggZTkzYzYy
MTU0YzhkZTE2ZDU3ZjY5ODdiMTM1MTZjYzFlNzc1ZDI3ZC4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMx
OWRmODkyMTFmYzc1NTU2YzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxl
ZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAo
IW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAt
MTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
CiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9y
S2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5z
dGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRB
TFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQog
CiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwot
ICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmls
ZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRp
b246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5p
QnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNT
dHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5n
ICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAg
ICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlB
VFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJl
c3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtNTE5LDE3ICs1MDIsMTEgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyID0gaWRlbnRpZnlpbmdEYXRhRnJvbUNvb2tpZVN0b3JhZ2UoW1tOU0hUVFBDb29raWVT
dG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBfY29va2llU3RvcmFnZV0pOwogI2VuZGlm
CiAKLSAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gc3RvcmFnZUFjY2Vz
c0FQSUVuYWJsZWQoKTsKLQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtk
ZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQog
ICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFi
bGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lU
UERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0K
LSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24g
PSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDgsMTEg
KzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
KSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkg
JiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwog
fQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhh
c0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25u
ZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bv
b2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNh
MDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYz
YjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2Fu
Y2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYg
KG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwg
MCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEw
MywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNv
bnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9n
cmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYg
KCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVt
UGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFu
ZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Cisg
ICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJv
Z3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRp
ZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdn
ZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50
NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFt
X3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJ
RCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkp
LCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25s
b2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAg
QEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYg
cHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2Fk
Q2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCks
IHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
KFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWlu
LmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94
eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdS
ZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2Vu
ZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAg
ICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25s
CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9w
cm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVk
RmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93
T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3du
bG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlz
LCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0
ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRl
c3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxv
d092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEw
NzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5
ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRy
KHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQo
ImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBA
IC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3ko
KQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5k
KCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsK
KyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFw
cGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRp
b25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwog
fQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
QEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVh
dGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rv
d25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJl
bnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBl
OjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3
b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAg
ICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NB
c3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9h
ZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAg
ICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJf
cywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAg
IFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBk
b3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsK
ICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9h
ZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3Mu
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25s
b2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDks
MTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJl
bW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlN
YXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94
eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4K
LSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2Fk
SUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJ
RCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgp
KTsKICAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1v
dmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93
bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsK
ICAgICAgICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBt
X3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFz
c2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERv
d25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2Fkcycg
YXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9w
cm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRl
eCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUx
Y2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURl
c3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2Fk
SUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hv
dWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThj
MDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uMjA3NGI2YzYzYTIwMmY2Yjc2NDdhYzZh
YzhkNTllOWZkYjU5MDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDI4IEBAIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFy
dExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
c1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRM
b2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigp
LnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7CisjZW5kaWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQog
ewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6
OnNpbmdsZXRvbigpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworI2VuZGlmCiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgqdGhp
cyk7CisjZW5kaWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3Rv
Y29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IDFiYjllNjc4OTU3OTYxZDQ3ZTM4OTY0YTJmOTJkMTYyZjdkNzQ1MTAuLjdlYzY4ZTFlNWM4
Yzk1YWIwMzU5YThlYzlhYzc2Zjg1NjdjZDQyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTYwLDYgKzYyLDcgQEAKICNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxi
YWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAj
aWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCkBAIC03MCwyMCArNzMsMTAwIEBACiAjaW5jbHVkZSA8
d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisK
ICNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3Nl
cnRpb24sIGNvbm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShX
ZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHko
cHJvY2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3By
b2Nlc3NQb29sKHByb2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94
eSo+JiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1By
b2Nlc3NQcm94eSo+PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nl
cygpCit7CisgICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOwor
ICAgIHByb2Nlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQo
KS5zaXplKCkpOworICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkpCisgICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9j
ZXNzKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0
ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRl
cnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5n
IFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3Zl
IHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQ
SXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0
Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5M
b29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1Rv
TmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNz
KCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9j
ZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAg
IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5k
KHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMu
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5n
IHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRh
U3RvcmVQYXJhbWV0ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9y
ZXMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bv
b2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAg
aWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7
CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91
bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHko
KQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xf
TUFOQUdFUikKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5k
aWYKLSAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bv
b2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFn
ZXIoV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3Qo
KTsKKyAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgbmV0d29y
a1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5l
dHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiArMTgxLDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkK
ICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1By
b2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNo
T3B0aW9ucykKQEAgLTEwNSwxNSArMTg5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAg
ICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5
cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bv
b2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
ZmFsc2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcgPSB0cnVlOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgeworICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25zLnNob3Vs
ZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9CiAgICAg
fQotCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNz
UGF0aCA9IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0
aW9ucy51c2VySWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKQEAgLTE2NiwxMiArMjQ3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQog
Ci1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3du
bG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAg
ICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3Jp
Z2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0yMzcsOCArMzE4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAg
IC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlz
IG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQu
Ci0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4
LDkgKzMzOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNTIsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9w
cm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQpAQCAtMzM0LDExICs0MTAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBz
ZXNzaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1f
cHJvY2Vzc1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJv
Y2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVBy
b3h5Ojpmb3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0
ZWRMZWdhY3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzk1LDExICs0NjYsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVy
LCBJUEM6OkNvbgogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29s
LnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwOCw3ICsxMjc0LDggQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lv
bklEIHNlc3MKIH0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5z
KQogewotICAgIHByb2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RG
TW92ZShkb21haW5zKSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsg
ZG9tYWlucyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogCkBAIC0xMjczLDE2ICsxMzQwLDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
U3luY0FsbENvb2tpZXMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewotICAgIG1f
c2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3Nlc3Npb25JRHMuYWRk
KHN0b3JlLnNlc3Npb25JRCgpKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0
b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vz
c2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJz
aXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lv
bklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5r
Rm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkp
OworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMzAyLDE2ICsx
MzY5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94
eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vz
c1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3Rv
cmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAg
ICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCkBAIC0xMzU4LDcgKzE0MTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29u
dGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lz
dHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdv
cmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVE
b21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlm
aWVyKQpAQCAtMTUyMSwxNiArMTU3OSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnBy
ZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3
ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGlj
IGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcygp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2
aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0
eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdv
cmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwg
MCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bv
b2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bv
b2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhy
b3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhz
KSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDJjMGUyYjY0
ZTY4YjgxZmU0MzAyZDc2ZjJhYWFmMjA1NmZjMWE4ZGIuLjVmZGJkMjkzY2Q0YmEzZWZiZDcxMmNj
MjcxODNhNjU5Y2NlZDgxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3Bh
Y2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsK
K2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7
CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKK2NsYXNz
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBy
b2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CiAKIGVudW0g
Y2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg3LDcgKzkxLDcg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291
cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNz
UHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nl
c3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFy
eVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwpAQCAtMTAyLDEyICsxMDYsMTYgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9w
ZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQg
TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0
aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3Nlcygp
OworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAg
ICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNl
c3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0
YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwog
ICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA3LDEzICsyMTUsMTEgQEAgcHVibGlj
OgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhy
b3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAj
ZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Cisg
ICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICBib29sIGhhc1Nlc3Np
b24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNl
c3Npb25JRCk7CiAgICAgCkBAIC0yMzAsNiArMjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcm
KTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9pZCBy
ZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
CiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVudGlm
aWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBPcHRp
b25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OSw3ICsyNTcsMTMgQEAgcHVi
bGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVy
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7IH0KKwog
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAgICB2b2lk
IHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKwogICAgIC8vIEF1eGlsaWFy
eVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Nyw3ICsyNzEsNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNh
bGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzEz
LDggKzMyNiw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+
JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFw
PENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5k
aW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJh
Y2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4g
bV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAtMzU0LDYg
KzM2NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+
IG1fc2Vzc2lvbklEczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1h
bmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
aW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJjMTBlNDFk
NTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
QEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5k
bGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3Nh
Z2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNl
cnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQ
cm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRh
YmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVz
c2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDky
MDFiNjEwLi5kODE2MGIwMGJlNDY0YjY0MTJlODg2NzcwNjliNjk5YThiYzg2ZWZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQu
aCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94
eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2Vzcykp
CiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29v
a2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNz
UG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2ll
TWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBw
bGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0
d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5h
Z2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
ICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAy
ICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChj
b25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxp
emUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2Jz
ZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2ll
T2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNl
cnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0K
LQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVy
LT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNF
bXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9z
ZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6
T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklE
LCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5j
aGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxD
b29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29r
aWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFj
a0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lv
bklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAg
ICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlm
aWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
c01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNz
aW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29r
aWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29r
aWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRv
Y3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxs
Q29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1
cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsg
fSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAg
cHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTgg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
I2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBi
ZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQx
MjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29r
aWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6
Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vw
cGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9
CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRp
YWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3
ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJp
dmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBj
b29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBw
bGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQg
cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNv
bnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2ll
T2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIq
Pj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xp
ZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCAwOTEyZDgwMDQzZTI2NjY3OTIxYTExNGMwN2Y0MDc2YjQ0YjlkNjYyLi40YmRh
Mzc5M2NjNDhkMzZkYjVkNmJlZjBlNDJlY2MzNzQxOWM2YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5
QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lv
bklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklz
Q29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBt
X2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNy
ZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMDgsMTEgKzMyMDgsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJ
TlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2VuZGlmCiB9
CiAKQEAgLTMyMjEsMTMgKzMyMTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNs
ZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDI3LDcgKzQ0MTcs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJsKQogICAg
ICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5V
c2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpV
c2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRv
KHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgp
LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigp
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8o
c2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCks
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9v
bCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3MjMsNyArNDcxMyw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQs
IEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9t
YWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJV
UkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlm
ICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAg
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRy
YW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWlu
IHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIs
IG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFU
cmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVy
LCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpA
QCAtNDc2MSw3ICs0NzUxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBpZiAobmF2
aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRD
bGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAg
ICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhm
cmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5z
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRD
bGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNr
QXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0
cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1
dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcyLDcgKzUzNjIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWlu
RnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlv
bihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRh
cmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVz
dGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9n
RnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJh
YmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5G
cmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
TWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciksIDApOwog
fQogI2VuZGlmCiAKQEAgLTk5NzMsNTggKzk5NjMsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5
c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0lu
Zm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1w
QWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNr
QXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJp
ZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICgh
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJp
YnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDk3YWJhZDY5ZTJj
MjA0Mzk1Zjg5MGI3ZjgxM2E5ZDMyNTY4OTU2ZGMuLjM0NWM3MGVjOTc0MjQ5ZGNjMmY4MjRhZjhj
NTc0NzNkYjJmNTUyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykK
ICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklE
LmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9v
bDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICJXZWJQ
cm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0YXRpYyBIYXNo
U2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dp
dGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUHJv
Y2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7CisgICAg
cmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmlndXJhdGlv
bihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdl
R3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21hdGlvbkNsaWVu
dD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2Fk
Q2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAgICAg
LCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlciht
YWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigqdGhpcykpCkBA
IC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAgICAgfSk7CiAK
LSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBmb3Ig
KGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hl
bWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFk
ZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAg
IGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMgbXVz
dCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgYWRkU3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTM0Miw5
ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBwcm9jZXNz
UG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsKLQogI2lm
IEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmlzRW1w
dHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQb29s
U3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDI0ICs0MDEsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1
dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1
dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVuYWJsZWQ7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewog
ICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyOSwxMSArNDEwLDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNz
LT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdl
ZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29u
dGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAtNDQzLDggKzQxOSw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNp
ZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5n
dWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDU3LDcgKzQzMiw4IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wg
ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5
UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1
eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwp
KTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
bGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0Ny
aXRpY2FsKSk7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJv
Y2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGlj
YWwpOwogI2VuZGlmCkBAIC00ODIsMjc1ICs0NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
Y3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vz
c1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5k
IGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBX
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24g
Y2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAg
IGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewot
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFy
UGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1By
b2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0
d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigp
LnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0K
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0
b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVy
cy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5n
IHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVt
cHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkp
OwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAq
KioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBz
dHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25z
dWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikK
LSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5y
ZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnko
KTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
I2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAg
ICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0
byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVE
YXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlm
ICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwot
ICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGly
ZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
OjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwot
ICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
bjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFp
bnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0g
ZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYm
ICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7
Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4
cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0g
bV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlm
ICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAg
ICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAg
ICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlv
bkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7
Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAg
ICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBo
c3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNT
dG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0
b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0
ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYK
LSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAg
IGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJh
bWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAg
ICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsK
LSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmRE
b21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJl
dmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0
b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlz
dHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9T
RVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVl
OwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxz
ZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAg
YXBwQm91bmREb21haW5zLAotICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9
OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0
aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVy
cyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9T
KCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5l
dHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFr
ZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhl
IG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBi
ZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9u
SUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0
YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3Jr
UHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBt
X25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1f
c3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9z
ZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1OSw5ICs0NjgsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0
d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1
dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNz
IHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3Vs
ZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBu
dWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzcyLDIw
ICs0NzgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNo
ZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9j
ZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
d2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdl
YlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RG
TW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAg
ICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIp
OwotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5
LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lE
IGlkZW50aWZpZXIpCiB7CkBAIC04MDksMjMgKzUwMSwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94
eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFp
biYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5V
U0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byog
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246
OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8g
QXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2Vy
dmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29s
cygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkq
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVk
UHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNf
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9j
ZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1t
eVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgzMywzNSArNTI4LDM1IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRD
b250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wt
PnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAot
ICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9j
ZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2Vz
cyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6
OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWlu
KSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdl
YlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZN
b3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAg
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBh
IG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRl
bnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChw
cm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAg
ICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwg
d2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBl
bmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkp
OwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3Nlcygp
LmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1
bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50
KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
LnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygp
LnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQ
b29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wt
Pm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
bW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
IHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3Mp
KTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFT
U0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAt
OTMwLDcgKzYyNSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0
cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAg
Zm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBX
ZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9u
J3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4K
LSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJz
aXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRi
b3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDQwLDgg
KzczNSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNw
b25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFj
dGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAg
ICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0
ZWRCdW5kbGVQYXRoOwpAQCAtMTIwNiw5ICs4OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
cm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAog
ICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3Mt
PndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcykKQEAgLTEzMDMsMTAgKzk5Myw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAg
aWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8v
IFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcg
YXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNy
ZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdl
IGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAg
ICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2Vi
UHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMzNyw3ICsxMDI0LDcgQEAgUmVmPFdlYlBhZ2VQ
cm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVu
dCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChh
dXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAg
ICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1
c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0xMzY0LDcgKzEwNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50Owot
ICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdv
cmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0x
MzczLDE1ICsxMDYwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJz
aXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJl
c3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBI
YXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFn
ZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0g
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Np
b25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFT
U0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xl
YXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDA5LDcgKzEwODcs
NiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGlu
aXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0
ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsK
LSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAK
ICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsK
QEAgLTE0MTksMjYgKzEwOTYsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRv
d25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgog
ICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVx
dWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0
UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25s
b2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRv
Y3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAg
IFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5w
YWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlh
dGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAg
ICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1Bh
Z2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAg
ICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBV
c2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQot
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3
b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1
ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0
LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93
bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7
CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBP
cmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2
YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdl
KSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRp
YXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGlu
aXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+
dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRS
ZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BT
aXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBz
dWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBA
IC0xNDQ2LDE3ICsxMTIwLDEyIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFBy
b3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJl
c3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5
ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0
aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUyNSwx
MSArMTE5NCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0K
LQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigp
CiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTQ0LDE0ICsxMjA4LDE2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJv
Y2Vzc0lEIHBpZCwgQ29tCiAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMg
c2Vjb25kcykKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9y
VGVzdGluZyhTZWNvbmRzKQogewotICAgIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRo
aW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vj
b25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOworICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29t
cGxleFRleHQpCkBAIC0xNTc2LDE0ICsxMjQyLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAg
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1
cmUodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVt
ZUFzU2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAg
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29u
c3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTk2LDE0ICsxMjY2LDE4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxT
Y2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9y
RWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
Tm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAg
ZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRl
ZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MjQsMTAgKzEyOTgsOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hh
dmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0x
NjM2LDEwICsxMzA4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVS
TFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJu
OwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVt
b3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0
ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBm
b3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3Jr
UHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCkBAIC0xNjczLDE2ICsxMzQzLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7Cisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1v
ZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0
aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBo
ZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJ
bnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY5MiwxMiArMTM2MCwxMiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3Vi
bGUgdGltZW91dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZv
LCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVz
c2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6
TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xNzY4LDMzICsxNDM2LDEwIEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxv
d3MpCiB7Ci0gICAgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldDo6UmVwbHkoKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRD
cmVkZW50aWFscygpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAt
MTgwNCw1NyArMTQ0OSwzNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJD
b250ZW50UHJvY2Vzc2VzKCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcigpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNT
dXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGls
ZSAoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNl
bmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVz
KCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29raWVzKCk7CisgICAg
Ly8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVwbHkoKSk7CisgICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlOjpSZXBseSgpKTsKICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93
c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVC
cm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhl
cmUuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRl
SW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2Fw
YWJpbGl0aWVzKCkgY29uc3QKQEAgLTIxMzEsMTUgKzE3NTUsMTkgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBh
Y3Rpdml0eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRo
ZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0g
ICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyld
IHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vydmlj
ZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigp
OwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTQ5LDcgKzE3NzcsNyBAQCBib29sIFdlYlByb2Nlc3NQ
b29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQp
IGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9m
KHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAg
ICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAg
ICAgfSk7CiAjZW5kaWYKQEAgLTIzNzEsMTQgKzE5OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6
RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQ
YWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlk
Q29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWlu
LCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBh
Z2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTI0MjksMjcgKzIwNDksMjcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
KyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2
aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgc191c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bv
b2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1
dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAog
Ym9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZv
clRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1
cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5k
ZXggOTUyOTI3ZWM3OTY1MGU3MGRkYmMzZmIwNGUzOGFiMWI2ZDEyMzc1Ny4uYWIwMWI2YjcwNWY0
Y2ViZjBjZTU0N2JlNjUzZGI1ODc5NzI5NzM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNl
T2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNs
YXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50Owog
Y2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0x
ODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBz
ZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAg
dm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25D
bGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAK
ICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE5MSwxNyArMTg5LDkgQEAgcHVibGlj
OgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJv
eHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyBy
ZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAg
ICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3Vy
cmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAg
IElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNz
YWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0Zv
clNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2Vu
ZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2Fn
ZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5
Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1f
d2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDksOSArMTk5LDYgQEAgcHVibGljOgogICAg
IC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRp
c2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0
YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3Rv
cmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYs
IFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3Rv
cmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVk
UGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0
cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lk
IGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigp
OwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9j
ZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAg
IGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7
CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwogCkBAIC0z
MDksOCArMjk0LDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGll
bnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2Vi
Q29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAg
IHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAg
ICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzIwLDEyICszMDMsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwog
Ci0gICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3Nl
cygpOwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLSAgICB2b2lkIHNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIAogICAgIHZvaWQgc3luY05ldHdvcmtQcm9jZXNzQ29va2llcygpOwpAQCAtMzk2LDE5ICsz
NzQsMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdl
bWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNp
dGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29y
a1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQ
YWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBz
dGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6
ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNl
V29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVy
Rm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxl
cklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ4MCw4ICs0NTIsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2Uo
V2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiYpOwogI2VuZGlmCi0gICAgYm9vbCBzdG9yYWdlQWNj
ZXNzQVBJRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
IH0KLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogCiAgICAgc3Rh
dGljIHVpbnQ2NF90IHJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKEZ1bmN0aW9u
PHZvaWQoV2ViUHJvY2Vzc1Bvb2wmKT4mJik7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlclBy
b2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcih1aW50NjRfdCBpZGVudGlmaWVyKTsKQEAgLTUwOCw3
ICs0NzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9y
VGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2
b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jv
c3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAg
IHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlm
aWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CkBAIC01MzUsOCArNTA0LDggQEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0K
KyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wp
OworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJl
dHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShD
RlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3Ry
aW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU1Myw2ICs1MjIsMTcgQEAgcHVibGljOgogICAgIHZv
aWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
c3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmlu
ZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgp
OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApA
QCAtNTY2LDggKzU0Niw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVO
ZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2Fy
bWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlh
bGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdl
YlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVk
OjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRh
dGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYg
bWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBA
IC01OTEsMTQgKzU2OSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2Vz
cygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygp
OwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjQwLDkg
KzYxMCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxX
ZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdl
YlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxXZWJQcm9jZXNz
UHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JX
b3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9OwogICAgIFN0cmlu
ZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJlZmVyZW5jZXNT
dG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8VXNlckNvbnRl
bnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZp
Y2VXb3JrZXI7CkBAIC02NTgsNyArNjI3LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVl
UmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25T
ZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTAsOCArNjU4LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJs
ZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBI
YXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNo
PGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1
cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzI0LDggKzY5MCw2IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwot
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGlj
dGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAtNzY3LDcgKzczMSw2IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYm9vbCBtX2Nvb2tpZVN0b3JhZ2VQYXJ0
aXRpb25pbmdFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV9zdG9yYWdlQWNj
ZXNzQVBJRW5hYmxlZCB7IGZhbHNlIH07CiAKICAgICBzdHJ1Y3QgUGF0aHMgewogICAgICAgICBT
dHJpbmcgaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtODMxLDcgKzc5NCw3IEBAIHByaXZhdGU6CiAj
ZWxzZQogICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxz
ZSB9OwogI2VuZGlmCi0gICAgYm9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mg
eyBmYWxzZSB9OworICAgIHN0YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNl
dDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bjsKQEAgLTg0MiwyMCArODA1LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KFQmJiBtZXNzYWdlKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
c3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0Fs
bFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMDgzYTdlNzlhNmRlYmYwZjI5OGNhYzI5OTJlMjcy
MzBhYWI1YjFhZS4uZjdlMGMxZjc2NWYzYjQ1NzU2ZDBjODA0YTkwODY5YjBhOGI5MTlkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzcsNyAr
NzM3LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAg
IG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92
ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmlu
ZGV4IGVlZTc4ZmJjOTg4NjQ5NDc2ZDEwOTViNDljZjEwNmMxODQ0NWQyNDUuLjhiNjg5NjM0OGM2
ZjJmZGZjZmRkZTE0ODg5NjAxNWYzNjMyZDY0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0
aWxzQ0YuaCIKICNpbXBvcnQgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJTdG9yYWdlTWFuYWdlci5oIgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5LmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+Cisj
aW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYzLDQgKzU2NSw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkK
IH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0
dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKaW5kZXggMDI0MTliN2FjMGIzZjAwYmMyMzU1OTRmMTkzMTgwYzNjYTJkNGI4Zi4u
YzFiOGM2N2YzNGIxZjIzMTNjNzUxZjMzMDY0YjkzMTk4YjkyOGMzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFj
a0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUg
IlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENP
Q09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0Zv
ckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMjkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
bGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitz
dGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRh
U3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYm
IGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKworLy8gRklYTUU6
IFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBjb3JyZWN0IHdlYnNpdGUgZGF0YSBzdG9yZXMuCitWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnNGcm9tQWxsU3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM+IGFsbFBhcmFtZXRlcnM7CisgICAgYWxsUGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFsbERhdGFTdG9yZXMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGFsbFBhcmFtZXRlcnMudW5jaGVja2VkQXBw
ZW5kKHN0b3JlLT5wYXJhbWV0ZXJzKCkpOworICAgIHJldHVybiBhbGxQYXJhbWV0ZXJzOworfQor
CiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lz
dGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6
OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDEwICsx
MzYsMTEgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0
UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmFkZFNlc3Npb24oKnRoaXMpOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCkBAIC0xMjgsMTcgKzE1MCwxMiBAQCBXZWJzaXRlRGF0
YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25J
RCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAg
fQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsK
KyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6
c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92
ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBH
UFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQcm9jZXNz
UHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwx
NyArMTg2LDMyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3Rv
cmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4gYWxsRGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRl
RGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNz
KSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2VzcyA9ICZkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjcmVhdGUoKTsKICAgICB9CisKKyAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nl
c3M7CiB9CiAKLVdlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCitO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpID8gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxw
dHI7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2Vic2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3
b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0xOTUsMTIgKzIyNyw2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KQogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wq
IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSk7Ci0gICAgcmV0dXJuIHBvb2xz
LmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5iZWdpbigpLT5nZXQoKTsKLX0KLQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAg
aWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykKQEAgLTQ0MiwxNSArNDY4LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBj
b21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlz
UGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQ
b29scygpIDogcHJvY2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3Qg
YmUgY29ycmVjdCB0byBpdGVyYXRlIHRoZSBwb29scyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAg
ICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtNDU4LDcgKzQ4
Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0
aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNp
dGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KQEAgLTcyNiwxNSArNzUxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAg
YXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nl
c3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlm
IChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsK
ICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMo
KTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0ZXJhdGUg
cG9vbHMgaGVyZS4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6Tm9uZToKQEAgLTc0Miw3ICs3NjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsK
ICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC04OTMsMTQgKzkxNyw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWRO
b3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2so
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5n
Q2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAxMywx
MCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hl
ZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDM4LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVI
b3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1l
cywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBA
IC0xMTg1LDggKzEyMDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMTk1LDggKzEyMTEsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1
bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNE
b3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVz
RG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEyMDUsOCArMTIyMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjE1LDIwICsxMjI5LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTI0MCwxMiArMTI0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NywxMiArMTI1OSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZCht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc2LDggKzEyNzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5MSwxMCArMTI4
Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2
YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMwNiwxMiArMTI5OSw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzI1
LDEwICsxMzEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMzNyw4ICsxMzIyLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJM
JiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1MiwyMiArMTMzNiwxNCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJM
LCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzODEsMjMgKzEz
NTcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291
cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTQxMSwxMCArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJM
LCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI2LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1
YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJv
bSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxS
ZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE0NDMsMTIgKzE0MDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDYwLDI1ICsxNDE0LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0
b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20g
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVk
aXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDkwLDQ2ICsxNDMzLDI3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9u
SUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5
KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwg
bW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3Vs
ZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTU2MSwzNSArMTQ4
NSwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogCiAgICAgUmVmUHRyPENhbGxiYWNrQWdn
cmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0KKyAgICAvLyBGSVhNRTogY2FsbCBzZW5kUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFJbW1lZGlhdGVseSBoZXJlLgorICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4mJiBkYXRhKSB7CisgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdU
Rk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
IHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25J
RCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2Nr
aW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNTk4LDI0ICsxNTExLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
dGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYyNywyMiArMTUy
OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJs
LCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0
U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJs
MSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNl
ckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNH
cmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5z
aWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNjU0LDEwICsxNTQ4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYg
dG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5t
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwx
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVu
LCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRm
YXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVk
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
cmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0
YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjY5LDE4ICsxNTYwLDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg4LDggKzE1NzUs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVz
dChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDAsNyArMTU4Niw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3
ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3
MDgsOCArMTU5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MjMsMTAgKzE2MDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzgsMTMgKzE2
MjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29u
c3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzU2LDEzICsxNjMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzc2LDEw
ICsxNjQ2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTMsMTAg
KzE2NjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhl
cmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA1
LDEwICsxNjY5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNl
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBm
cm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODE3LDYyICsxNjc4LDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3Qg
VVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRl
SHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29s
YXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93
bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKQEAgLTE5MDMsMTAgKzE3NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNv
b2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hv
dWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MTQs
MTAgKzE3NDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVu
YWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDog
V2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNo
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyNSwyMCArMTc1NiwxNCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3Qg
VVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTk1MCw4ICsxNzc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3QKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNO
QU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTYzLDggKzE3ODcsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05B
TUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xOTcz
LDggKzE3OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKQEAgLTE5ODQsMjYgKzE4MDYsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKIH0KIAot
Ym9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0
YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICByZXR1cm4g
cHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFT
dG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJl
ZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIwMTgsOSArMTgyNiw2IEBA
IEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9y
ZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bv
b2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vz
c1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxMDks
NiArMTkxNCw0MyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKSwgMCk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKK3sKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNh
Y2hlZENyZWRlbnRpYWxzKCksIDApOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7
Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisK
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTM4LDE3
ICsxOTgwLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVj
dG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9j
ZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE2MCw4ICsyMDAw
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykK
IHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dU
ZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIxODAsOCArMjAxOSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShi
b29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTIxOTYsMjAgKzIwMzQsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjMxLDI5ICsyMDY0LDYgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0
aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0
YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3Rv
cihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAg
ICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAg
IG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsK
LSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29r
aWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVl
KEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChX
VEZNb3ZlKGZ1bmN0aW9uKSk7CkBAIC0yMjc3LDggKzIwODcsNiBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVE
aXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCkBAIC0yMzgzLDcgKzIxOTEsMTQgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5h
YmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0
Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3Rl
ZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0
ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
ZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBh
cmFtZXRlcnM7CiB9CiAKQEAgLTI0MTMsMTAgKzIyMjgsNiBAQCBBUEk6OkhUVFBDb29raWVTdG9y
ZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVT
dG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vz
cygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdp
bkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0
ZW50KCkpIHsKQEAgLTI0MjQsMjMgKzIyMzUsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBl
bnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxz
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZldGNoaW5nIGZyb20gbXVsdGlw
bGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlQoIWNvbXBsZXRpb25I
YW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9z
ZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRl
dGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3Rh
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI0NjYsNyArMjI2OSwxMiBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQot
I2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVTRShHTElCKQogV1RGOjpTdHJpbmcg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eSgpCkBAIC0yNDc4LDM1ICsyMjg2LDE5IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJM
JiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUs
IGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmFkZFNlc3Npb24oKnRoaXMpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3
TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJv
dW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5k
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBw
Qm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1MjgsNyArMjMyMCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0
aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERh
dGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3Rv
cmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3Rv
cmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5k
RG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1MzYsMTAgKzIzMjgs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25z
dCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0Zv
clJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91bmRE
b21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTQ3LDE2ICsyMzM2LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29y
a1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50
aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlm
aWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVh
ckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IDE0MDc2YWE5MjRlN2NlMmZmN2Y3M2VkYTM2ODNhODVjNGE2M2RhYWQuLjg2
ZWQ2N2FhMmU0Y2M1ODZkYjVmOTM4Y2JlMWQzMDYxNDJiZmI4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTc1LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFu
YWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwpA
QCAtMTA4LDcgKzEwOSwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vi
c2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsK
KworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsg
cmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOCw2ICsxMjQs
MTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lk
IGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVz
dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBj
b25zdDsKQEAgLTE0Miw2ICsxNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwpOwogCisgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7IH0KKyAg
ICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOworCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICB2b2lkIGZldGNoRGF0YUZvclJlZ2lzdHJhYmxl
RG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+Jiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+JiYsIEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKICAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
QEAgLTIyOSwxNSArMjQ0LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3Rv
cjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsK
IAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKQEAgLTI2
Miw4ICsyNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24m
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAg
IGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjczLDYgKzI3OSw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwg
VVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAg
V2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNDksNyArMzU3
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3Ry
aW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2
b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9E
T01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzg3LDEyICszOTUs
MTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1f
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RNb2RlRW5hYmxlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkIHsgZmFsc2UgfTsKIAog
I2lmIEhBVkUoU0VDX0tFWV9QUk9YWSkKICAgICBWZWN0b3I8UmVmPFNlY0tleVByb3h5U3RvcmU+
PiBtX3NlY0tleVByb3h5U3RvcmVzOwpAQCAtNDA5LDYgKzQxNiw3IEBAIHByaXZhdGU6CiAgICAg
VW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRy
PEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAg
IFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25D
b29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNk
ODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNWJhMzkwMGQyZGFmZjA1NmFiZDBj
ZGYwNTdhZTMyODU0ZWJmZWNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
QEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdv
cmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
OwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3
NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3
MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpM
YXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAv
LyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwg
c28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bv
b2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQg
V2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJp
bWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRl
RGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0
YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2Ix
MzYwOThmM2EwNDFjZWZmOTkuLjA4OTI4ZmNkMzE2ZDg4ZjlkNTE1MDBlYzY4NGFkMWI2NGFmOGEz
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFu
YWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewogICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBz
dG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYg
c3RvcmFnZVR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2
YzEzNDE1NzMyYmRhYy4uMDc5M2VkNTEzOTE1MjhkOWI0YjlmZGIwZjRhZDNjODk2MGZkYTUyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcApAQCAtMzcsMzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9u
UGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50
Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50
Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
LgorICAgIC8vIEZJWE1FOiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhl
IFdlYnNpdGVEYXRhU3RvcmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJv
eHlTZXR0aW5ncyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAg
ICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vy
cm9yczsKICAgICBwYXJhbWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
KTsKLSAgICBwYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdz
OwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYg
KG5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMp
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwg
MCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNv
bnN0IFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAg
bV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRp
bmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBhNjMzNDlhNjI0Yzk2MGQ3ODg2YjhmNmM0ODM5ZjYyYjJhOGE0NDA3Li5m
OTZhODMyMTBjMTVjMTYxNTYzNmQ2OTBiNzJiMTExYmJmMjk4ZmY2IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAt
MDktMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bv
b2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJGaWxlTmFtZS5tbToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpy
dW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
d2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQpOgorCiAyMDIwLTA5LTExICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBfc2V0Q29v
a2llQWNjZXB0UG9saWN5IHRvIFdLSFRUUENvb2tpZVN0b3JlCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTli
NzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi4zM2Y0NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNm
NmYwOWM5ZjRmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nv
bm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NH
cm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwg
TmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0
aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMg
b25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9j
ZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBj
cmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
ICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYx
NjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9p
bnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3
IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0
YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlv
biB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIu
Z2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQy
NDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRi
OWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxl
dGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZp
bGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4
dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQw
YmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJ
bmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIp
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRl
MyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
Qk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0
NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2
MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRl
eGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRl
bnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6
QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRh
dGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFi
YXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9u
OkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
RGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3
ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJh
MTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIs
IERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYg
b3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3Mg
PSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIwZGVi
NzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5NWZk
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0aWMg
dm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxkRXhp
c3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJGaWxl
TmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAgLTg3
LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNpb25P
cmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERhdGFi
YXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25V
bnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3QpOwog
ICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRlLCBp
dHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4aXN0
aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAgLTE1
NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVzdE5h
bWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRlRGly
ZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7CiB9
CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRp
UHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMy
Li42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vz
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
Qk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRh
NWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2
OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcg
Kzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZp
ZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhl
IHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERC
VGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNv
bmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFy
dHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNz
LgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5k
ZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAg
ICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8g
dGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRh
dGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KaW5kZXggNTM2
NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJhZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdl
NjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KQEAg
LTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAog
ICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlzay4KICAg
ICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQ
YXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmli
dXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0
UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdj
NWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNp
c3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVBy
ZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVT
aGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQ
cm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xh
c3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInZh
bHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtwcm9jZXNzUG9vbC5nZXQo
KSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CiAgICAgW3dl
YlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgn
a2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgewpA
QCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3Vz
cGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29u
dGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1l
c3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4
MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIwZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0
IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsKICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wg
KnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAgICBib29sIGhh
c0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3gi
XTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3N0b3JlIF9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVz
cy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0VudGl0bGVtZW50
KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNlbmRpZgotICAg
IEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0p
OwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQppbmRleCA2MDk4ZThk
YWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUw
NTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGlj
IHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3Rv
cmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFs
c2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlMl1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQppbmRleCAxZjk2NjFjYWYwNjhmMGJlMzAwYTE0NTc0NTUwZGRhMjgyN2NjNTkxLi4yNGQxYjk2
M2ExMGJjZjQwY2NkYzM0NzA2ZmFiOWExM2FiYmYyY2I0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBAIFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVBy
ZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdl
YlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5
MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFhOTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0
YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQog
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAog
CiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJl
Y3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAq
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3Jl
IF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAg
TlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZh
dWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1
NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0Rh
dGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxl
TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0
RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7Cisg
ICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAg
ICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24pCiAgICAgW3dlYlZp
ZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0g
ZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVU
b1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRl
OWY4Zi4uZjg1MzZlMmQzOGU4MWMyYjhlNTBkMTYyNzU5N2Q5NWM3NzQ5OWYwNSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFz
aWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBV
c2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3Rl
ZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsK
KyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVy
IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZv
byBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5h
bWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtl
clRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9y
YWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1
bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bv
b2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
OwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxz
ZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBu
b3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAg
IEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93
ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBU
RVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVY
UEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nl
c3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURh
dGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZp
ZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGlj
IHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVT
VChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2Fk
QWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJv
dXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29y
a2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgy
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0
T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7
CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RF
U1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJ
blByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsK
KwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tp
ZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBD
b29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRl
Zjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29v
a2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0K
IEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhl
IHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNz
aW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1By
ZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBy
b2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVT
dG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29v
a2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6
Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0
cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBA
ZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1w
bGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJF
USgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOwor
ICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAg
IHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5M
b29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3Ry
aW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2ll
cyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tp
ZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29r
aWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBA
ZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7Cisg
ICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVs
ZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0
IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0g
W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29r
aWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVO
YW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAg
ICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxv
Y2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29r
aWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKwor
ICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVO
YW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVz
dFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
MTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3Nh
Z2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBD
b29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBS
ZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0g
W1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2
NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVy
YWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAg
IGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9
IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3Ig
KGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29r
aWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcp
KTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRN
TCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2Fk
SFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2Rl
bGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7
CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBO
U0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5k
ZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkz
OTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRh
c2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAt
MTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVu
VW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRp
b24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEu
Z2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4IDdlN2E0MjEzYzgwNDM3NzgxYjBkNjU3ZTQ1
OWFiZjcxN2U1NzkxNzIuLjM2OTFjNjdmOWE3ZTI2ZTllZmFjYzNiNWM4ZjA1OTE0ZjFmZmQ1ZjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yMzksNyArMjM5
LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3
IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBz
dG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNz
ZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3Rl
ZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtk
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURh
dGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAg
IFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdp
dGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxl
cjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1MCw3
ICsyNTAsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVz
c2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0
b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAK
ICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRo
T2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNE
YXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUyNiw3ICs1MjYsNyBA
QCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0
aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0
ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OnJlcXVlc3RdOwpAQCAtODQ0LDcgKzg0NCw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQog
ICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0
aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGU4NTgzYjhjMTJhNDU5Nzg5ZDQwOTRh
ODk2OTdlMGY3NjBiMGMxMDIuLjgwOGM2NDNhYTM4MGFkNzIxNDQ4ODJjODY3MDc4ZmRkNmI5Yzcx
ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDUw
LDEyICsxMDUwLDEyIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS0NvbnRleHRT
ZXRDYWNoZU1vZGVsKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGtXS0Nh
Y2hlTW9kZWxEb2N1bWVudEJyb3dzZXIpOwogCi0gICAgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKHdlYnNpdGVEYXRhU3RvcmUoKSk7
CiAKICAgICBXS0NvbnRleHRSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQod2Vic2l0ZURhdGFTdG9y
ZSgpLCB0cnVlKTsKLSAgICBXS0NvbnRleHRTZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChwbGF0
Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RvcmFnZUFj
Y2Vzc0FQSUVuYWJsZWQod2Vic2l0ZURhdGFTdG9yZSgpLCB0cnVlKTsKICAgICBXS1dlYnNpdGVE
YXRhU3RvcmVDbGVhckFsbERldmljZU9yaWVudGF0aW9uUGVybWlzc2lvbnMod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIAogICAgIGNsZWFySW5kZXhlZERhdGFiYXNlcygpOwpAQCAtMTA2Niw4ICsxMDY2
LDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAg
IFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTMxNDIs
NyArMzE0MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE3Myw5ICszMTcx
LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVPdGhl
clBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4gbmV3IFBsYXRmb3JtV2Vi
Vmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250ZXh0UmVmIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24pCitXS0NvbnRleHRSZWYg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0NvbnRleHRTZXRQcmltYXJ5
V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKICAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408853</attachid>
            <date>2020-09-15 13:23:25 -0700</date>
            <delta_ts>2020-09-19 14:21:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200915132324.patch</filename>
            <type>text/plain</type>
            <size>309415</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJlMGIwMzAxYzg4MWE5ZDlj
YjUzYmJhYmU0MTg0Zjc4Mjg4M2EzZjcuLjMyMDYyYzMzZmFlZmI5NzI1ZTdiMGZlYjYxMzY5NmUz
ZmExOGQ4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMgU1BJIHRvIFdLV2Vic2l0ZURhdGFT
dG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRleCBmY2UyMzg5
ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTkyNTU0NjFiODYw
ZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhU
VFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNj
ZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkp
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMzBmMDVhNmVmMjUyZTkxNGNjODYwNjRjNTNmMzVm
YTY5ZmQ4ZjllMS4uZGYzZDI3MjU2YmY3Nzg3Y2U3Mjg2NWQ4ZTY3YmU2ZDY1NjJiN2RlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAg
LTM0NywyOSArMzQ3LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENs
aWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBz
ZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92
ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCisgICAg
Zm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJh
bWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEs
IGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9u
SUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRh
YmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rvcnks
IGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9u
KHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQotICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vz
c2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29v
a2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBw
bGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0
ZXJzKTsKQEAgLTUwNSw4ICs0OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
bmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjEsNyArNTA5LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNm
SWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5n
LiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBp
ZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRv
cHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0g
ICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVu
dGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NN
YXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5l
d1BvbGljeSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QK
IHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJu
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikK
LSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
KTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggOTFiYzUw
MzU0NDVkMTc3Y2RmYjdkOTc4MGRkNDJlZmVlY2RhNTdjMC4uNmY0M2ZiMTRjMmVkZDZhNGUwYjM5
ZjcwMTFiNGY3OTAzZWU0YjUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAg
ICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
IGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwg
Ym9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc2LDcgKzM3
NSw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZv
cm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVj
ZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKIApAQCAtNTQ1LDcgKzU0Myw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9u
czsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2Vy
U2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCmluZGV4IDk5MDFjNWNiNzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2ZmRhMTA0YmYuLjAyZGRi
OTIzNGU5OTljM2U2Y2RjZGNmMGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAg
ZW5jb2RlciA8PCB1aVByb2Nlc3NTREtWZXJzaW9uOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIs
IG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjgsOSArNjgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE2
LDExICsxMTMsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAg
IE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBh
cmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICgh
ZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFT
dG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKQEAgLTE0MiwyMCArMTM5LDYgQEAgYm9vbCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVj
b2RlciwgTmV0d29ya1Byb2MKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBz
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlm
ICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5zaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgz
ZmZmMGEyZmY3OWRmZTQyMTBkOWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIxMDc3ODM1ODQ4NDZjOTBk
MDEwYTAzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTcxLDcgKzcxLDcg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAog
I2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2ll
QWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNj
ZXB0IH07CkBAIC04NSwxMiArODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2Nh
bDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAK
LSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91
bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsK
LSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAg
IGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCmluZGV4IGNlNWMxY2U5YjJjNzBkZDUzNzJhOTljNzQyNmIyNTQ5MjZkMDBlZGIuLjVmYTUz
M2UxNjY3NmQ3OTYyMzA4NDUyNWFmMzQzY2QxYmY0YTYxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0K
QEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBh
cmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdv
cmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAt
MTA1LDExICsxMDIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hl
IHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vz
czo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0Vf
QVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFk
NmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIy
OWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNh
dGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBT
dHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
bW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4
OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
bW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0
ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNv
b2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJ
bnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBz
ZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAg
ICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3Ms
IFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vz
c1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKaW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4
Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBz
ZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29y
a1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3Bw
CmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNl
MTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7
CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBl
bmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIg
PDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBl
bmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNv
ZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3
OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFs
PFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+
IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUo
KnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9w
dGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4g
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0
YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApA
QCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENv
b2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2ll
U3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQu
LmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4
ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9v
d25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAg
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29r
aWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVT
dG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHko
KSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NF
UlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0
b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdE
YXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293
bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
b2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1
cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmlu
Z0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2ll
TWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBj
b29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQs
MjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91
bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYg
YXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
ICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3Vu
ZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNl
ZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHBy
b3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vz
c2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBX
VEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2Vy
LnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tp
ZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQ
Q29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1
dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkg
JiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8q
IGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBj
b29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5n
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVN
YW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsK
ICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8g
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAg
ICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29r
aWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRo
ZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5n
ZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAg
Y29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJ
UHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9v
YnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9
ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsK
IH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNE
aWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQo
KQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFn
ZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVy
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNz
UG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9u
TGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nl
c3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBh
c3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHBy
b2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBh
cmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hE
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5l
d1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2Vy
dmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVu
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3By
b2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xD
cmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRl
N2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlh
NGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9p
ZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVz
aERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAg
ICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29u
c3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0LmNwcAppbmRleCBkMTJjYWJjNzQyYTczOTUyZTcwYzFkY2Q2ZjBhMmU1MGY3YTYxNTMx
Li4xOWY5YzlmOTBiODljOGFjODNjOTFiZmVjY2YxNjdjYjI2ZDYwYzI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTQyMSwxMSArNDIxLDYgQEAg
dm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUzOCwxMyArNTMzLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlw
dEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRl
eHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJl
ZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAg
LTU4NiwxMSArNTc0LDYgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7
CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVm
IGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMo
V0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC01OTgsNyArNTgxLDcgQEAgdm9pZCBXS0NvbnRl
eHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vz
c0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29u
dGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4
dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYg
ZG9tYWluUmVmLCBXS1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwg
V0tBcnJheVJlZiBleHRlbnNpb25zUmVmKQpAQCAtNjQ2LDEyICs2MjksMTEgQEAgdm9pZCBXS0Nv
bnRleHRDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgdm8KICAgICB9KTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9p
ZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0
YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggMmZm
NTNlOGM4Njc1NTQ4ZDRhNWMxYWUyNzRjZDdhMDc2YjY3MzNiYi4uMzk2NWEyNGMzY2E5ZGI4OGQ1
NWEzZjJkMWIzOTIyMzNiMTM2MzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtODYsOCArODYsNiBAQCBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0Nv
bnRleHRSZWYpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5
cGVkZWYgdm9pZCAoKldLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdl
RnVuY3Rpb24oV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1
bmN0aW9uKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCmluZGV4IDQ2YzI2OTJlNTM1ODI4MDhhYjc0OTE1
MDJmYjM5ZjgzNzZlYjBiODIuLjFjM2E1Y2IzZDE4MzFlNzcwMDI3ZjU4MTUyZDViOTZmY2IxZGRl
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcApAQCAtNjksNiArNjksMTEgQEAgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdLV2Vic2l0ZURh
dGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtS
ZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1w
bChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCiB2b2lkIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVm
IGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRl
RGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IGEyNTk2ZGJk
MTU0MGZiNzRhZmNiYzU2NWJiYzU5ZTI4NmU2OWRkNmIuLmJiOThhYzU4MWRhNWZmOGQ5ZDZlMmE2
OTlhMjQxZDU4YzM1MDI5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC00Nyw2ICs0Nyw5IEBAIFdLX0VYUE9S
VCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0VGVzdGluZyhXCiAKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAK
K1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
ZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVu
YWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1l
cmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1t
CmluZGV4IDgwZGQ1MmEyNGU4YWVhMGMwZjUxN2IxY2IwZWQ1Nzc2ZWQ2NGIxY2MuLmJmZjA2Nzky
M2RlNmUwZGM0MmEyNDkxZWQwZmZmMGMyOTY5ODM2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC00MDcsMjggKzQwNyw2
IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25z
dCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBv
cnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsK
LSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZv
aWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2
b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5k
TmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nl
c3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM2LDEyICs0MTQsMTIgQEAg
c3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0g
ICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKIHsK
LSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyCkBA
IC01NjYsMTMgKzU0NCw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRv
RGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQ
b29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0tICh2b2lk
KV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dz
Ci17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9j
YXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MDUsMTEgKzU3Niw2
IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25z
dCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50
Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENy
ZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3Rl
Y3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFs
c0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNw
YWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IDJhMGY1ZTZkZWU2ODc0YWEwODNmNDgwY2UyODVk
NTI2YTIzOGY0Y2YuLmYyZTg5OTUwZGZhZTFkOTNlMjllMjFhYzQ4MjVkNDIyZGFmNWU5OTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCkBAIC04NywxMCArODcsNiBAQAogLSAoX1dLRG93bmxvYWQgKilfcmVz
dW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0YVN0b3Jl
OihXS1dlYnNpdGVEYXRhU3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICopcGF0aCBv
cmlnaW5hdGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91
bGQgYmUgY2FsbGVkIG9ubHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFyZSBydW5u
aW5nLgotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1
bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV90
ZXJtaW5hdGVTZXJ2aWNlV29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9z
KDEyLjApKTsKIAogLy8gVGVzdCBvbmx5LgpAQCAtMTIyLDkgKzExOCw3IEBACiAtICh2b2lkKV9w
cmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJ
VEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAu
MTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjoo
Qk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsK
IC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBp
ZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICop
KWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzoo
TlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rp
b25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBh
cmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAu
MywgMTIuMikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KaW5kZXggZWY5MGU4YmY0ODUxM2RhNzIyOWNlOWZkMjJm
MDdmNTFmZTUxNDhhZS4uZjU5OWRmNzlkYTE4YjViNDI5MmMzNzU2NDEzYmZlODk0ODZhODk4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCkBAIC02MTcsNiArNjE3LDExIEBAIHN0YXRpYyBWZWN0b3I8V2ViS2l0
OjpXZWJzaXRlRGF0YVJlY29yZD4gdG9XZWJzaXRlRGF0YVJlY29yZHMoTlNBcnJheSAqZGF0YVJl
Y29yCiAgICAgfSk7CiB9CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Cit7CisgICAgcmV0dXJuIF93ZWJzaXRl
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxl
bWVudCk7Cit9CisKIC0gKGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+KV9kZWxlZ2F0
ZQogewogICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0KCkuZ2V0KCk7CkBAIC02NjMsNCArNjY4LDI3
IEBAIHN0YXRpYyBWZWN0b3I8V2ViS2l0OjpXZWJzaXRlRGF0YVJlY29yZD4gdG9XZWJzaXRlRGF0
YVJlY29yZHMoTlNBcnJheSAqZGF0YVJlY29yCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRv
U3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRl
RGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0
b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7
CisKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCBmY2NjNmI1OTdlZjM3N2U3YzA0ZDkyZGI2
NzBiZDQxMzVkODYxMWY3Li42ODNlYTk2NzRiZTY0OTFjOTMzY2VlMzA4NzRiZjVmNDA1YWFlMmNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKQEAgLTgzLDkgKzgzLDE2IEBAIHR5cGVkZWYg
TlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7
CiAKIC0gKHZvaWQpX3JlbmFtZU9yaWdpbjooTlNVUkwgKilvbGROYW1lIHRvOihOU1VSTCAqKW5l
d05hbWUgZm9yRGF0YU9mVHlwZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopZGF0YVR5cGVzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIAorLSAoQk9P
TClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50
aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vi
c2l0ZURhdGFTdG9yZURlbGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNSksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkp
IF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKIAorLSAo
dm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLmZiOThk
MDU5MGM5YWQyODIzNWQ3MTFiN2NhYWM5YmM1NWM5YTY0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBA
IC02NCw4ICs2NCw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAg
ICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQo
KSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCku
c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQog
CiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSAr
MTM4LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFN
YW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBz
aWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdCht
YW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdl
cjsKIH0KIApAQCAtMTczLDggKzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3Nl
dF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBp
ZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
W10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0
YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsK
IH0KQEAgLTI2OSwxMSArMjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nv
b2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxp
dGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2Ug
YWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAg
ICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29s
c1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6
Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190
YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIw
LDExICszMTEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2Zh
aWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19s
aXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgs
MTEgKzM2NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0
ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9v
bGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZmIxMmIy
MTc3NzRmMzk3ZTU2YzdlZjM3ZDAzNDljZDVjMjBhNTQyYy4uYTIyMWJlN2QzNjZmOGYzZDM3NmYw
MWQ5OWI2ZTI3OTc2ZGY1MGRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAg
ICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2LT5wcm9jZXNzUG9v
bCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+cHJv
Y2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYtPnBy
b2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdl
JiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAgICAg
ICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNlck1l
c3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMy
OWViYWVhN2QzODY1Li4zMDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246
OmRlbGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCku
dG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2Vy
ID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uM2M0Mjg3MmUxNWUwM2Y1YWU2MTMzYmM1YTkyYWMyYWM4MTgzZGY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQwLDEyICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAK
Ky8vIEZJWE1FOiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgaXMgdW5uZWVkZWQgbm93Lgor
Ly8gVGhpcyBpcyBqdXN0IGEgbGVmdG92ZXIgb24gQ29jb2EgcGxhdGZvcm1zIHdlIGFyZSB0cnlp
bmcgdG8gbW92ZSBhd2F5IGZyb20gYW5kIGRvZXMgbm90IG5lZWQgYW4gQVBJIGFic3RyYWN0aW9u
LgogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGlj
IEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6Cisg
ICAgc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgc2luZ2xldG9uKCk7
CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkm
LCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlk
YXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6
CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Q
cm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50Lm1tCmluZGV4IDE1MTIyOTA0NWYxM2U5Y2RkYmUwOTFlNjI3YmZhMWZlMjA2ZGUy
ODkuLjE0ZDBiNmJkMWQ2ZTU1NTllYzdlNmIxYTJmYmE4MzFiYjM3YWI3YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KQEAgLTEzOSw2ICsxMzksMTIgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCYgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5n
bGV0b24oKQoreworICAgIE5ldmVyRGVzdHJveWVkPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKIHZvaWQgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0KQogewog
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IGNvcmVSZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQ
Qm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3
YTY0MDQxYTI5MWQ1ZjI5NzM1MTc2ZTMxZWE3MGY1ZWQ1NTZjLi4xMzY3MGUyZDgwYjAxODQ3MDM1
YzE5ZGY4OTIxMWZjNzU1NTZjNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0
aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCldIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFi
bGVkKTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlm
ICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBA
IC0xNjYsOCArMTY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xG
b3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBp
bnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NB
VEFMWVNUKQogICAgIGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVG
QVVMVCwgMCksIF57CkBAIC00OTMsMjIgKzQ5Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
CiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7
Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9i
aWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNh
dGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1Nh
ZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01p
bmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNl
bmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihO
U1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJp
bmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
ICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29w
eUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJl
c3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2Rl
ZmF1bHRzIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFs
RGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAg
ICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJs
ZWRWYWx1ZS5ib29sVmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVu
YWJsZUlUUERhdGFiYXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQ
RGF0YWJhc2VFbmFibGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQot
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9
IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSAr
NTg1LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
IGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9
CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFz
RW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9v
bDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2Ew
MjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNi
MDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5j
ZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAo
bV9kYXRhU3RvcmUpCisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAw
KTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAz
LDEzIEBAIFdlYlBhZ2VQcm94eSogRG93bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29u
c3QKICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dy
ZXNzKGNvbnN0IFVSTCYgVVJMKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAo
IW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5k
bGUpLCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAg
ICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lv
biwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9n
cmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZP
Uk0oQ09DT0EpCiAKQEAgLTEzMSwxMSArMTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlk
U3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dl
CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2
NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1f
cHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlE
LCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSks
IG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxv
YWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBA
QCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBw
cm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRD
bGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwg
cmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0o
UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4u
YXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+
bV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkK
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5
ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1Jl
cXVlc3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJv
Y2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5k
UmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAg
ICB9KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwK
ICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRG
aWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGRvd25sb2FkSUQgPSBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dP
dmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25s
b2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMs
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3Rl
ZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxv
YWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24p
IHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5k
bGU7CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYg
KCFtX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVz
dGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVz
dGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93
T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3
MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1Zjll
Yjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5l
dHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIo
cHJvY2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgi
Y29tLmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAg
LTcwLDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgp
CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQo
KQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwor
ICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25E
aWRFbnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBw
bGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAg
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9
CiAKIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2ws
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBG
cmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpA
QCAtOTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93
bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVu
dFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6
OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdv
cmtpbmdBc3NlcnRpb24pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAg
ICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fz
c2VydGlvbj4obV9wcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2Fk
cyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAg
ICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2Vy
dGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9z
LCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAg
UkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRv
d25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwog
ICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxv
YWRQcm94eS5nZXQoKSk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwx
MiArMTA2LDkgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25s
b2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVt
b3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1h
cCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5
IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgot
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJ
RCkpOwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElE
KCkpOworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OwogICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92
ZShkb3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5
TWFwOjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3du
bG9hZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwog
ICAgICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1f
cHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkp
OwogICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51
bGxwdHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93
bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3By
b2Nlc3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4
IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFj
ZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJ
RCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91
bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJlOGMw
NmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3ODNmMzA1Li4yMDc0YjZjNjNhMjAyZjZiNzY0N2FjNmFj
OGQ1OWU5ZmRiNTkwN2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCkBAIC00NCwxNyArNDQsMjggQEAgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0
TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExv
YWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCku
c3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
OjpzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6
c2luZ2xldG9uKCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY3VzdG9tUHJvdG9jb2xJRCk7CisjZW5kaWYKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCp0aGlz
KTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3
YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uNDVkOTY2YzNlNGIw
YTQwZmQ2Nzg5ODRmOThiOThmMjU3OTFmMWM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAj
ZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNDks
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiArNjIsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVE
YXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJh
Y2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNp
ZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3MywxMDAgQEAKICNpbmNsdWRlIDx3
dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwog
I2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2Vy
dGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShw
cm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJv
Y2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5
Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7Cisg
ICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgp
LnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNz
ZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nl
c3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKKwordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRl
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcg
V2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUg
dGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJ
cy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2
LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxv
b3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3Mo
KSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nl
c3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQo
c2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2ll
U3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5
KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVj
dG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFT
dG9yZVBhcmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3Jl
cygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBp
ZiAocHJvY2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgp
CisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRp
ZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9v
bFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdl
cihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgp
OworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0
d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsxODEsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQog
ICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hP
cHRpb25zKQpAQCAtMTA1LDE1ICsxODksMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpn
ZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAg
ICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlw
ZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
bGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhm
YWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNo
b3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxk
TWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9
Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQ
YXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRp
b25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNDcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAK
LURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291
cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25s
b2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAg
IHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3Jl
LCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5
KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmln
aW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlv
bnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTIzNyw4ICszMTgsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAg
Ly8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
bmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4K
LSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgs
OSArMzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9w
cm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1Miw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25u
ZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3By
b2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQwNyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNl
c3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9w
cm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9j
ZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJv
eHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRl
ZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ2Myw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIs
IElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wu
cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigp
LT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyNzEsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9u
SUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZN
b3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBk
b21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiAKQEAgLTEyNTIsMTYgKzEzMTksMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVz
aENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMo
c2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYg
c3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAg
IG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUuc2Vzc2lvbklEKCkpOwogCiAgICAgaWYgKGNhblNlbmRN
ZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJz
aXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Np
b25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7
CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
ICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0K
IH0KQEAgLTEyODEsMTYgKzEzNDgsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiBXZWJzaXRlRGF0YVN0b3JlKiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0
YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBp
ZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBz
ZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdO
b25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJh
bWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTM5NSw3IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4p
LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0
aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTU4LDM0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5l
Y3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50
LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiks
IDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9j
ZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91
bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5o
YXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVn
cm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91
bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFs
aWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAg
ICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91
bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlv
blRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAg
IGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAg
ICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rp
dml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlBy
b2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3Ig
YmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uYTliODQx
MjkxOGZiYzE5ZjU2YWE5ZjUwNjM3ZDdlODYwYTExMWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTUyLDYg
KzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAK
K25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQor
CiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3LDggQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9h
ZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVBy
b3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29s
OwpAQCAtODcsNyArOTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVjdCBXZWJzaXRlRGF0YTsKIAotY2xh
c3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJv
eHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwg
OiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJD
bGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiwgcHVibGlj
IFJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNiwxNiBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CiAKLSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7Cisg
ICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxO
ZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwog
ICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5
ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vi
c2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxv
YWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vz
c1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9E
YXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdl
YnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTMg
KzIxNCwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmlu
YWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJv
Y2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBk
aWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRl
RGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwog
ICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7CiAgICAgdm9pZCByZW1v
dmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICAKQEAgLTIyOSw2ICsyMzUsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsK
KyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0KFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAtMjQ4
LDcgKzI1NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbGVh
ckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1fY29va2llTWFu
YWdlci5nZXQoKTsgfQorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOwor
CiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjU2LDcg
KzI3MCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25u
ZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29u
bmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsK
ICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlv
bjo6Q2xpZW50CkBAIC0zMTIsOCArMzI1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vz
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9v
bDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJz
aXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxs
YmFja3M7CkBAIC0zNTAsNiArMzYxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFzaFNl
dDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMz
MTBjMTFlLi44MmMxMGU0MWQ1NjI1ZGJhYWRmOTEzYjk0ODA0NDdjNzBjYzE5ZDllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTAgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkg
Y28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0
YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBM
YXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50
KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0
NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLmQ4MTYwYjAwYmU0NjRiNjQxMmU4ODY3NzA2OWI2OTlh
OGJjODZlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAj
aW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9w
dGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCAr
NDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2Vi
Q29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQ
cm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRy
KG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7
Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29v
a2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
ICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9
CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkp
OwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpp
bml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAg
bV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVu
dAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQot
ewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRv
KiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChv
YnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykK
LSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nv
b2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17
Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVu
dCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6
OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgp
IG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRl
bGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tp
ZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3Vt
ZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29v
a2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29r
aWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29v
a2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklE
LCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBA
IC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0Rp
ZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5p
dGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4u
NmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5
IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwog
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4g
SFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNs
YXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFu
YWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29y
a1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5l
dHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRC
YXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmpl
Y3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9j
ZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5
Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAg
Ly8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgp
Pj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
SGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGYxYTllYzM0ODQxNzg3ZTRhODc1MWFjNmY2NzZh
ZDFhOWJmZjFiYzcuLjViNjJiMTQyYzlmZjNmYjhkZjc2OWE1N2YwMmY1ZmEyNzAzYzdiN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0NCw3ICsxNzQ0
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBj
b250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIwOCwxMSArMzIw
OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJM
RShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAw
KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQo
KSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMSwxMyArMzIxNyw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92
ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYK
QEAgLTQ0MjcsNyArNDQxNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29u
c3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyMyw3ICs0
NzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlk
ZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxl
RG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAg
ICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9
OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkK
LSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdh
dGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3Nz
U2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmln
YXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9
CiAjZW5kaWYKICAgICB9CkBAIC00NzYxLDcgKzQ3NTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9E
YXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0
cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGlu
YXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzIs
NyArNTM2Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3Qg
V2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291
cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lz
dHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9
LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01h
aW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2Fk
Rm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOwor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJl
Y3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlh
dGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Nyw1OCArOTk4NywyNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3Jl
OjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBp
ZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRl
c3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVS
TEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5n
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0
cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
aW5kZXggOGRmMWZhMzY0ZjMwYzM5YThkYTU2ODczZDZkYTZhZTM2M2I5ZWViMi4uYTNiMDExM2Qy
ODFjMjZmYTgxYTllOWFmMzIxNGJlYmJjZTY5MTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlmCiAKICNk
ZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVB
U0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10
LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJP
UihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2Vi
UHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNF
X0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIl
cCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10
LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
KSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzQs
MTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0
b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAg
IDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0
UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVl
UmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVu
aXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpj
cmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBo
aWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNh
bXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJv
Y2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAj
ZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNS
ZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3
YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBXZWJQcm9j
ZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNv
bmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVz
ZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVy
TWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBh
ZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bv
b2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3du
UHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1Vz
aW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xl
dG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYg
KzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNs
aWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0g
ICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0K
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
ZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEsMTEgKzQx
MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRD
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3
b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5n
dWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNz
UG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTksNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5n
ZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ0OSw3
ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hh
bmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChp
c0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCkpOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAg
IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0
d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdl
YnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkg
d29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMu
Ci0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcg
dmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkg
ewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0K
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRh
U3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJl
Zigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtl
VW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVu
ZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29v
a2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVz
KCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZp
Z3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6
IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChz
Y2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3Rv
cmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5l
ckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5w
YXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9y
YXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgp
KTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1l
c1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBk
aXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQg
Zmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8x
NzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdl
RGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9y
YWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8g
bV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmco
KTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hl
U3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1v
dmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0
ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBi
b29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29s
IHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0
Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGlj
YXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBw
Qm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZh
bGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNl
RW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURh
dGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0
KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9
IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0
cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlz
SXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlm
Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlm
Ci0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAg
ICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5w
YXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7
Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsK
LSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91
bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFs
UHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5Owot
ICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3Jr
Q2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29u
c3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygp
OwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0g
ICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAg
IHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVi
dWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAg
ICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3Rh
bmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
Lm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRv
JiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RT
U3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNT
dG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxU
RVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVk
KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFi
bGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5
U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMg
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAg
ICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4s
Ci0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVy
cwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0g
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNz
TGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlm
Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAg
aWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFr
ZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0
aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0
byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBp
ZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAg
IG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4g
Km1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewot
ICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNz
UHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBs
ZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9j
ZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSArNDY4LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNz
UHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAg
ICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0
aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBj
bGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQ
cm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAK
QEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclBy
b2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewot
ICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQo
Y29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1Ro
aXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9j
ZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwg
cmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlBy
b2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVk
KFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQ
cm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0
cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
QVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwot
Ci0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGF1dG8qIHdl
YnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9v
bChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpj
cmVhdGUoKS5nZXQoKSkpOwogCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0g
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAg
fQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhv
c3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBw
cm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJv
Y2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlm
ICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBt
X3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisg
ICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAg
ICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nl
c3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRh
U3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVz
ZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHBy
b2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcg
d2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJv
Y2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNz
UHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNz
UG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsK
IAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
Y3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQp
Iiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIg
cHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAg
ICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0
b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5
KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9j
ZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9j
ZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNT
RVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5j
b250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgp
IDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051
bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtl
clVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5t
X3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYg
KCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHBy
b2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlu
cyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNz
KTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3Mp
KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2Vu
ZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBC
dWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1
c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8v
IHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVE
YXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3Jl
ICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBp
ZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApA
QCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2Vi
UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9j
ZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlh
bGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBh
dGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nl
c3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0
aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlz
LCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcygp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8
QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSkgewog
ICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9y
ZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0
ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9y
ZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkpOwor
ICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQogCiAgICAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAyNCw3IEBAIFJl
ZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQm
IHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlm
ICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2Vy
UHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAg
ICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0K
ICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJB
Z2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVz
ZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNl
dFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNl
bmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdp
blVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNz
aW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFs
dWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAg
IGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJh
bWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQp
OwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0
YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQw
MSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFn
ZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJv
eHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1Bh
Z2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Np
b25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBw
Qm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYgKGluaXRpYXRp
bmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94
CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVl
c3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9m
IHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRv
cCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0g
ICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0
aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0Vx
dWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGlu
aXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxz
ZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRv
d25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRh
dGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJl
IHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdl
IHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0
aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwg
eyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFp
bnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlh
dGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwor
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBh
Z2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vz
c2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNB
cHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAog
RG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJ
OjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVl
c3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
ID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5
LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAg
fQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQ
cm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAK
QEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lu
cygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lk
ZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1l
ZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTUzNiwxNCArMTIwOCwxNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjphY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCBwaWQsIENvbQogICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGlu
ZyhTZWNvbmRzIHNlY29uZHMpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRTZXJ2aWNlV29ya2Vy
VGltZW91dEZvclRlc3RpbmcoU2Vjb25kcykKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSk7CisgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIHNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sIGFs
d2F5c1VzZUNvbXBsZXhUZXh0KQpAQCAtMTU2OCwxNCArMTI0MiwxOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1l
KQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAg
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSks
IDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1l
KQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNj
aGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTU4OCwxNCArMTI2NiwxOCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVt
ZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Mo
dXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE2LDEwICsxMjk4LDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1
c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFs
VVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQpAQCAtMTYyOCwxMCArMTMwOCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0
ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBh
bGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAg
ICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY2NSwxNiArMTM0MywxNCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVs
KSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2Rl
bCksIDApOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsK
IAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2ODQsMTIgKzEz
NjAsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQ
YWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3Qs
IGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogewotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc2MCwzMCAr
MTQzNiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVy
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVw
bHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Np
b25JRCYgc2Vzc2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29u
dGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBw
cm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAgLTE3OTEsNTcgKzE0NDMsMzQgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHBy
b2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRl
U2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5j
b21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+
ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgc2VuZFN5
bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2Fs
U3RvcmFnZSgpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2U6OlJl
cGx5KCkpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kU3lu
Y1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxT
dG9yYWdlKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVw
bHkoKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7CisgICAg
Ly8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgIC8vICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0
aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlm
aWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUu
CisgICAgLy8gbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlm
aWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRl
QXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMTE4LDE1ICsxNzQ3LDE5IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGlt
ZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVy
ZS4KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEzNiw3ICsxNzY5LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1
cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94
eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzU4LDE0ICsxOTkxLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yNDE2LDI3ICsy
MDQxLDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlv
bnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAo
bV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9
JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAg
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29s
IFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBw
cm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAg
ICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZiht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4g
V1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsK
ICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCmluZGV4IDY3MzE1YmQ4ZjM3ZmM4ZDBkYmMwYjkxMjdhNjhmYzFiOGVjZjUxZjQu
LjNlNjVmYTQ2YTYxY2I5MDM0MDJhZDdhODJkZTYwOWY3NTRjNDhmZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNT
IFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRp
b25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3du
bG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxl
Q2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYp
OwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGll
bnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4
OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAg
V2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5n
ZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBu
b24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlv
bigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMo
Y29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nl
c3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUo
KSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQu
CiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9y
ZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lk
IHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFt
ZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9u
cyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBu
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vz
c0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0Zv
clRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0
aW5nKFNlY29uZHMpOwogICAgIHZvaWQgcmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoKTsKIApAQCAtMzA5LDggKzI5NCw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVu
dDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmll
d0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNiw3ICszMDksNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2
b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhj
b25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
ayk7CiAgICAgdm9pZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spOwogCkBAIC0zOTQsMTkgKzM3NiwxMyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0g
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mu
Z2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChX
ZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2
b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9t
U2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2Vy
dmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQ
cm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29t
cHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JT
ZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNTA0LDcgKzQ4MCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5z
ZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0
UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5
RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1t
ZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUzMSw4ICs1MDYsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0g
ICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAg
dm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAt
NTQ5LDYgKzUyNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVz
c2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NjIsOCArNTQ4LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZv
aWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4NywxNCArNTcxLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90
aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzYsOSArNjEyLDggQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQ
cm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0
aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7Cisg
ICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVj
dGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBt
X3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY1NCw3ICs2Mjks
NiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+
IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4g
bV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Np
b247CiAKQEAgLTY4Niw4ICs2NjAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1w
bGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFs
IHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0
cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRz
OwogCkBAIC03MjAsOCArNjkyLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVy
bWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYg
VVNFKFNPVVApCkBAIC04MjYsNyArNzk2LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBt
X2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAg
ICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAg
c3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwpAQCAtODM3LDIwICs4
MDcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBt
ZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0
IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCAwODNhN2U3OWE2ZGViZjBmMjk4Y2FjMjk5MmUyNzIzMGFhYjViMWFlLi5mN2Uw
YzFmNzY1ZjNiNDU3NTZkMGM4MDRhOTA4NjliMGE4YjkxOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggZWVlNzhmYmM5ODg2
NDk0NzZkMTA5NWI0OWNmMTA2YzE4NDQ1ZDI0NS4uOGI2ODk2MzQ4YzZmMmZkZmNmZGRlMTQ4ODk2
MDE1ZjM2MzJkNjQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9y
dCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjMsNCArNTY1LDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRp
dGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBl
bnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA0
ZjgwNTQyYTEyN2U2NDI5OWIxNTRhMWY1NmUyZDhmOTgwNDRjMWRjLi4xMTNmOWUzNDVmMmQ5OGFl
ZTViY2EyOGIzZDI1MzY3YzExNzkxMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgi
CisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Mklu
aXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBACiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAi
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAg
LTgzLDEzICs4OCwyOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJl
dHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7Cisg
ICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAg
ICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCisvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdp
dGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0b3Jlcy4KK1ZlY3RvcjxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMo
KQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVy
czsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3Jl
cygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFt
ZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5l
cmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsMTAgKzEzNiwxMSBAQCBXZWJzaXRl
RGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdl
cyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7
CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXpl
KCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0
YVN0b3JlKCkKQEAgLTEyOCwxNyArMTUwLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRl
RGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAg
ICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVt
b3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFs
bERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFsbERhdGFTdG9y
ZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAo
YXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0
ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Np
b25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6
c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsxODYsMzIgQEAgYm9v
bCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4g
ISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQoreworICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0
b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMo
KS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Np
b25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYg
KG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
ID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0
ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjI3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1
bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNz
ZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9y
ZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBw
b29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVs
bHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZl
ZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0NjgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwog
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0
ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC00NTgsNyArNDgzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmZldGNoV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNzI2LDE1
ICs3NTEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVt
b3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBv
b2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAvLyBG
SVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSBwb29scyBoZXJlLgogICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRj
aCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
OgpAQCAtNzQyLDcgKzc2Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCku
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTg5MywxNCArOTE3LDkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9j
ZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0LDEyICsxMDEzLDEwIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewog
ICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAg
ICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBj
b25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0
cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0
TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODUsOCArMTIwMiw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90
IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTExOTUsOCArMTIxMSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBD
b21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25J
RCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9u
SUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIw
NSw4ICsxMjIwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1Rp
bWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJp
bmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTUsMjAgKzEyMjksMTMgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBz
ZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjQw
LDEyICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjU3LDEyICsxMjU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEyNzYsOCArMTI3Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkxLDEwICsxMjg3LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzA2LDEyICsxMjk5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjUsMTAgKzEzMTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzM3LDggKzEzMjIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzUyLDIyICsxMzM2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJy
ZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM4MSwyMyArMTM1NywxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJy
ZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRv
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDEx
LDEwICsxMzc4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJl
c291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRv
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJs
UmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE0MjYsMTIgKzEzOTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MywxMiAr
MTQwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYg
dXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0NjAsMjUgKzE0MTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3Rl
cmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0OTAsNDYgKzE0MzMsMjcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5j
bGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVs
ZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBz
aG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTYxLDM1ICsxNDg1LDI0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAKICAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRS
ZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fQorICAgIC8vIEZJWE1FOiBjYWxsIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVk
aWF0ZWx5IGhlcmUuCisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsK
KyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRo
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hl
ZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdy
YW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1OTgsMjQgKzE1MTEs
MTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFz
ZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjI3LDIyICsxNTI5LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhp
c3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQs
IGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFpbklERXhpc3Rz
SW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRv
cEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNl
Y29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJv
b2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE2NTQsMTAgKzE1NDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFj
dGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZh
bGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLm1l
cmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZh
dGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NjksMTggKzE1NjAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBo
YWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODgsOCArMTU3NSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2
YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0
SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMCw3ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVy
IHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3Mo
KS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcwOCw4ICsxNTk0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcyMywxMCAr
MTYwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOCwxMyArMTYyMCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
NTYsMTMgKzE2MzIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25s
eUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFi
YXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRp
b25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzYsMTAgKzE2NDYsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MywxMCArMTY2MCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBp
c0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRo
ZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNH
cmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDUsMTAgKzE2NjksNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2Fk
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVS
TCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE4MTcsNjIgKzE2NzgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3Nz
U2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBm
cm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3Nz
U2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9h
ZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tp
ZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3Jh
Z2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lz
b2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVk
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpA
QCAtMTkwMywxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAg
ICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBi
bG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwg
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxNCwxMCArMTc0OCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6
OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFn
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xOTI1LDIwICsxNzU2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5h
YmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRD
b29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZv
clRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTUwLDgg
KzE3NzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhv
c3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVS
TC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVS
TCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5NjMsOCArMTc4Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rp
bmcoCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTE5NzMsOCArMTc5Niw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTk4NCwy
NiArMTgwNiwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFT
dG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJv
eHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjAxOCw5ICsxODI2LDYgQEAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxp
bWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
aGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMu
YWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09
IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEwOSw2ICsxOTE0LDMwIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsK
K30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIx
MzgsMTcgKzE5NjcsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZl
RGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOworICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOworICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vzc2lvbklEKTsK
LSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0Fs
bFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0KIAogICAgIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBAIC0yMTYwLDgg
KzE5ODcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxi
YWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGlj
c1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjE4MCw4ICsyMDA2LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0o
Y29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjE5NiwyMCArMjAyMSwxNSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9v
bCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyMzEsNDggKzIwNTEsMTkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhD
b21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJz
aXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlU
b1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
ZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1f
cGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsK
LSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0p
OwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tp
ZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRp
bmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29r
aWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5m
bHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBmb3IgKGF1dG8g
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3Mp
LCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
V2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGZvciAoYXV0
byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQpAQCAtMjI5
OCw4ICsyMDg5LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwog
Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAg
ICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24t
PnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQwNCw3ICsy
MTkzLDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBh
cmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNl
bmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDM0LDEw
ICsyMjMwLDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tp
ZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDQ1LDIzICsyMjM3
LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5j
dGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3Rv
cmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
CkBAIC0yNDg3LDcgKzIyNzEsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJs
ZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkK
IAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjQ5OSwzNSArMjI4OCwxOSBA
QCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNT
dG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlz
KTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRT
ZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xl
YXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRT
ZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0y
NTQ5LDcgKzIzMjIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERv
bWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRl
QXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5k
RG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMo
KS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVl
cygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERv
bWFpbnMpOwogfQogCkBAIC0yNTU3LDEwICsyMzMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1f
c2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRp
c3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAjZW5kaWYKIApAQCAtMjU2OCwxNiArMjMzOCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVu
ZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCA0ZTM3MmFkZjYyOTZi
NDI4ZjEwZWNjMjkyZWE3ZGQzNTM1MzQ3YWI5Li45MTY1YzllZjI5MzIxY2E3YTVlMDM1YjA5ZmNm
MzdhMTc2NWY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0
b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vz
c1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJQYWdl
UHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKQEAgLTEwOCw3ICsxMDksMTIgQEAgcHVibGlj
OgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
PiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFT
dG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAg
ICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Vzc2lvbklEOyB9CkBAIC0xMTgsNiArMTI0LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBj
b25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSgpOworCiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7
CkBAIC0yMjksMTcgKzI0MCwxMSBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdD
b29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6
OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNo
Q29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNo
ZWRDcmVkZW50aWFscygpOworICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CiAKICAgICB2b2lkIHNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCkBAIC0yNjYsOCArMjcxLDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihX
ZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAK
LSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI3Nyw2ICsyODAsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAg
IGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5n
Jik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzUzLDcgKzM1OCw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZv
aWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2
b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3Rlcldp
dGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBz
dGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJv
dW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5MSw4ICszOTYsNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9Owog
I2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsK
LSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAg
ICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxMyw2ICs0
MTYsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBt
X2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9y
ZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAog
I2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9y
ZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIu
LjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1NGViZmVjZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vi
c2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94
eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0Mjku
LjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAt
NDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRp
b25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFT
dG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEg
V2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3Jl
IGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29u
J3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4g
dGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0g
bV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3Jl
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5
ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li4wODkyOGZjZDMxNmQ4OGY5
ZDUxNTAwZWM2ODRhZDFiNjRhZjhhM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
UHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
CkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFw
LnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkp
OwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJm
OTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjA3OTNlZDUxMzkxNTI4ZDliNGI5
ZmRiMGY0YWQzYzg5NjBmZGE1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9u
UGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lv
blBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8v
IEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0
byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAg
Ly8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBX
ZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBt
X2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExT
RXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0g
bV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdu
b3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJy
b3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9y
cyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGlu
Z3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzc1ZTUyYjRmMmNkNWZkYmM1OTJl
ODkwZDhiMDA4MTNlNjM4YWQzZC4uN2YyYzBlZDQ3MzNlMDcwNGZhZjc0NzA3ODliYmIwYTQ2MzIz
MGM0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDIwLTA5LTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVy
c2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06CisgICAgICAgIChydW5UZXN0KToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTpp
bml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKwog
MjAyMC0wOS0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIE1vdmUgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyBTUEkgdG8gV0tX
ZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5
Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4YTc2OThhYWI1NmU2MTFj
ZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQv
TmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
R3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVj
dGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlz
IG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJv
Y2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2gg
Y3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2
MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcs
NyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFk
MjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRk
YjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVs
ZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBm
aWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhF
eHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFk
MGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3
NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
SW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1Yy
KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhl
IGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0
ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMy
NDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3
NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tX
ZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1l
OkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBk
YXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRh
YmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYz
Nzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEy
YTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERC
LCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYm
IG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRl
Yjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVm
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGlj
IHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4
aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmls
ZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04
Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdp
bkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRh
YmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJz
aW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9u
VW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsK
ICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwg
aXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlz
dGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0x
NTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3RO
YW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURp
cmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwog
fQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYz
Mi4uNmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAs
NyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0
YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYw
Njk2N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3
ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJW
aWV3ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRo
ZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlRoaXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vj
b25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBh
cnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vz
cy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwog
ICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRv
IHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJk
YXRhYmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUz
NjU0MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3
ZTY0NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBA
IC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAK
ICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAg
ICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxl
UGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJp
YnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1B
dFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5j
ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdl
UGVyc2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3
YzVlZi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJz
aXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQ
cmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNj
cmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFts
YXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2Vi
VmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2
YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0
KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3
ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0o
J2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsK
QEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1
c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIy
ODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywx
NCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29s
ICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBo
YXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxl
c3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVu
dCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAg
ICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJd
KTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4
ZGFkMjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhl
MDUxMDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0
b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW0KaW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBk
NjRkYWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQ
cmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3
ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1
OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2
NGIzNTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTks
NyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkK
IAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQK
IAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhO
b1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGly
ZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1
cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9y
ZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAg
IE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0x
NTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0Rmls
ZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVS
TC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOwor
ICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAg
ICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAog
ICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJW
aWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9
IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9v
bCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3Jr
ZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Vydmlj
ZVdvcmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0
ZTlmOGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJh
c2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Vydmlj
ZVdvcmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vycywg
VXNlckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0g
YWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0
ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7
CisgICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBG
b28gQ3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRD
b250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBu
YW1lOkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3Rv
cmUgX2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3Jr
ZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3Rv
cmFnZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29y
a2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRC
dW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQ
b29sPiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bDsKIAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2
aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFs
c2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQg
bm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAg
ICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5f
d2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAg
VEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2Vydmlj
ZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBF
WFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVE
YXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRp
YyBzaXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRF
U1QoU2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1Qo
U2VydmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFi
b3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdv
cmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVl
OworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEo
MnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMs
IExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVT
VChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91
dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitU
RVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdo
SW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7
CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAt
MTk0NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1By
b2Nlc3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCld
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDky
YTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
QEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8g
RklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2ll
IGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBM
QVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBO
bywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
KQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91
dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRo
b3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0
Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBs
ZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24g
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBf
bWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0
ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdl
ID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21l
c3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAg
cmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRD
b29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50
LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBp
ICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsg
YWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1Qo
V2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJv
Y2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tp
ZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8i
LAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRD
b29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlv
bkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAg
IFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tp
ZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1d
OworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lv
bkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwg
V2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tX
ZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURh
dGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNU
KFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0g
ZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52
YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsg
aSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0o
KTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4i
OwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRp
YyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUg
KnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUx
MmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNm
ZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3
IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0lu
RmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2
ZGUuLmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGlj
IHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURh
dGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0
aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0
aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtw
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFk
b3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21E
YXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldL
V2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8
V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBz
dGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJv
Y2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNl
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsK
IAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUg
PSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3Vz
dG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dl
YnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQ
YXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktp
dCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1By
b2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAg
IFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpA
QCAtODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9G
QUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJy
b3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IDFlN2UyMWFkNzQzZTdiMDEwZjdkYmE3MDVmMjNkMGRiNTU4
ZGI0MGMuLmZmMGZhM2FjODY1YTFkYWRhNjFmNDA1ODQ3ZDNkMjBjNDAxMjBkNGUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDY0LDggKzEwNjQsNiBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhw
bGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2Rp
ZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
KTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzOSw3ICsz
MTM3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
dHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTcwLDkgKzMxNjgsOCBA
QCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFn
ZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3
KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0
Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409211</attachid>
            <date>2020-09-19 14:21:33 -0700</date>
            <delta_ts>2020-09-19 16:34:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200919142127.patch</filename>
            <type>text/plain</type>
            <size>314185</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4NjU0NzAxOTc2YTE3OGEz
NTQ1ZDM5ZDA2NmE3NDBmYzA0Y2VlNTQuLjE0YzU2MDA0YjNjMWFhOTg4MWM5YjRjZTRiNGM3NzFl
MWIzMjk5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTYg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllciBzaG91bGQgcHJvY2VzcyBpdHMgSVBDIG1lc3NhZ2VzIGZyb20g
YSBiYWNrZ3JvdW5kIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUw
ZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQuLmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4Yjhk
YzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJv
Y2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAg
Y29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgy
MzQzLi43ZjQ3NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5
ICszNDcsMTkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVn
TW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Np
b24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
KSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRh
dGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vz
c2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vz
c2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAg
ICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Np
b24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0g
ZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5k
aW5nQ29va2llcykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29v
a2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRz
LnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpA
QCAtNTA1LDggKzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29u
c3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNz
aW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlm
aWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3Jl
YXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNy
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNl
CisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIu
Z2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNv
b2tpZUFQSSgpKSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpj
b29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5
KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9y
YWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAg
IGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAg
ICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBj
b25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAg
ICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNz
aW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+
JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAg
IGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFs
dWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2
MTBiODY3OTA1NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMy
Mjk3NWIxZTY5ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3
VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0
d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBA
IC01NDQsNyArNTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHRO
ZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1f
c3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5k
ZXggOTkwMWM1Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5
OWMzZTZjZGNkY2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IHVpUHJvY2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29y
a0FUU0NvbnRleHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYg
VVNFKFNPVVApCiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2Rl
ciA8PCBpZ25vcmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2Rl
ciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNl
bmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2Rl
ciA8PCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzEx
MywxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9u
YWw8VmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVy
czsKKyAgICBkZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3Rv
cmVQYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMp
OworICAgIHJlc3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFy
YW1ldGVycyk7CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb29raWVBY2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNOb0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJm
Zjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1
Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNF
KFNPVVApCiAgICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQ
b2xpY3kgeyBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsK
QEAgLTg1LDEyICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2Fi
bGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlm
Ci0gICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBz
aG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5k
ZXggZGE2MzU5MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAz
OTBkZmZlOWEzNDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgs
OSArNzgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEg
KzEwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNB
VElPTl9BVURJVF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNj
OGUzZjliOGYxNjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2Uy
MjU2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYg
aG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRl
eCBjMjczNmUwMjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIw
ZjAyYTdkOWU5ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAt
NTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNp
dGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0
eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3Rv
cmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdl
SWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkp
LCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24g
PSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29u
c3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vz
c2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92
ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3Vw
LmNwcAppbmRleCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNk
NTk5NTk2YTY4ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApA
QCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9y
ZVRMU0Vycm9ycyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1h
a2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3Jl
VExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lv
bjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXgg
NmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZj
YWQxYWQ4MmE0NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBl
bmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIg
PDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5k
aW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIg
PDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwg
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAg
T3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGlu
Z0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGlu
Z0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8
U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVk
RGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWMKICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQz
OS4uZTFiMjMzNzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwx
NSArNTEsMTEgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5j
cHAKaW5kZXggYmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4
OTJiZGEwYjgzYzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kK
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAg
ICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9y
ZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewot
ICAgICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYg
Y29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNv
b2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFu
YWdlci0+Z2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29v
a2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2Vy
LmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMp
IG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoY29va2llcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3Vu
ZENvb2tpZXMpIG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3Rv
cmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYg
KCFwb29sKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2ll
cykgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBk
ZWZhdWx0U2Vzc2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRl
ZCB0byBOZXR3b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
ci4KLSAgICAgICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZShjb29raWUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9v
d25pbmdEYXRhU3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1
dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUo
cG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7
CisgICAgICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29v
a2llLnNlc3Npb24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5n
RGF0YVN0b3JlLT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2ll
TWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1f
b3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBj
b29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5w
cm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
ZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8v
IEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAg
aWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAg
ICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293
bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nv
b2tpZU1hbmFnZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwot
Ci0gICAgICAgIC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJv
Y2VzcyBpbiB0aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVz
RGlkQ2hhbmdlKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNz
Q29va2llcyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3du
aW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBA
IC0yNzYsNDYgKzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5n
ZSgpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
OwotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkg
PSAmbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwog
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7
CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlm
aWVyID0gV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
KFt0aGlzXShXZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFt
X293bmluZ0RhdGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0
ZWQgcHJvY2VzcyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBj
b29raWUgc3RvcmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZs
ZWN0ZWQgd2l0aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KSB7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vz
c1Bvb2wuc3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAg
ICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3Rl
ckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bv
b2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVu
cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9u
TGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlQ29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2
NjE4YTNlMjJlMWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3
NDYwYTc1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENv
b2tpZVN0b3JlLmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQ
Q29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVs
dFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJD
b3JlOjpDb29raWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCmluZGV4IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1Zjhi
NTNmNWIzZDMwNWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdL
Q29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQog
Ci1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KSk7Ci19Ci0KIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0
b3JlKFdLQ29udGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVm
YXVsdERhdGFTdG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEph
dmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVm
IGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29u
dGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDEx
ICs1NjMsNiBAQCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnNldEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAot
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4
dCkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRl
U2VydmljZVdvcmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tD
b250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
KQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5S
ZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5
UmVmIGV4dGVuc2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENs
ZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
KQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0
YXRlRm9yVGVzdGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsK
KyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0
UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3Rv
cmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5
OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3
ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0Nv
bnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RF
UFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0
YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250
ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0Nf
QVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZh
dWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0
Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsK
IFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlv
bk1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNl
UmVmIFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19F
WFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3Rv
cmFnZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lU
SF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRl
eCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1
NjVkYzk1YTgzOTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQp
OwogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1X
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tD
b250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0
eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1Jl
ZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2Fn
ZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VG
dW5jdGlvbik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1
NTQ2NmMwYTJiZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVE
YXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vi
c2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVE
YXRhU3RvCiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFr
UmVmKCkpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0lt
cGwoZGF0YVN0b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dl
YnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0
ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDlj
MTA3ZDFkYTA3ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUx
MjQzOTY0NDExZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldFRlc3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwog
CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxz
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVm
IGRhdGFTdG9yZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBl
bmFibGUpOwogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVt
ZXJhbEZ1bmN0aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bQppbmRleCBmZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3
YzdiNDE2Zjk2YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYs
NiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBw
b3J0ZWRQbHVnaW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17
Ci0gICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2
b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoo
dm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSgpOwotfQotCiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9j
ZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBA
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBI
YXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcwogewot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7
Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpA
QCAtNTYwLDE4ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBU
b0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNz
UG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
LS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewot
ICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsK
LX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
OihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3Mp
OwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xv
Y2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAt
NjA0LDExICs1NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0Rp
Y3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0t
IChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcg
KillbnRpdGxlbWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xl
YXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9u
U3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFu
ZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNl
KHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0
Y2Q4YTIxOWExN2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIz
ZjBmMjA2Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rv
d25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vi
c2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0
cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nl
c3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdv
cmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEw
IEBACiAtICh2b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQ
SV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2Vy
dmVyIiwgbWFjb3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7
CiAKIC8vIFRlc3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40
KSwgaW9zKDExLjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vz
c0ZvclRlc3Rpbmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5
PE5TU3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50
aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9u
U3BhY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9j
b29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0
aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEw
LjE0LjQpLCBpb3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3Mo
MTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZvclRlc3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJk
UGFydHk6KE5TVVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjoo
Qk9PTClzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4
YTUxMjIwNjVjYzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQy
MTg4ZTc4N2YxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMg
VmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5T
QXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJl
dHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVn
YXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAt
NjY4LDQgKzY3MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+
IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUt
PnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sK
KyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCist
ICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBf
d2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3Jv
dW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4u
NDIxNWRiNzQ3YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5h
bWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5
cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0
eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxl
Z2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2
b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
dm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAog
TlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2
Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5
NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51
bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGRhdGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVj
dCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAg
ICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAg
IGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBu
dWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5h
Z2VyOwpAQCAtMTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29r
aWVNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAg
IFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25h
bF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9
CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdf
c2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAg
cmV0dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0
b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAg
bWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsIEdDYW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNb
MF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFz
ayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdl
ci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQo
dGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7
CiB9CkBAIC0yNjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29v
a2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNr
X3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDEx
ICszMTgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRD
b29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsK
ICAgICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRv
JiBjb29raWUgOiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJl
cGVuZChjb29raWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcy
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tp
ZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFu
YWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2ll
cyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRp
c2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20s
IHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJv
Y2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayld
KCkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9
IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5n
ZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1Njkx
MmEyNjkxNTMwNTdkZjUyN2NkZDQ0NjAuLmI3ZWQ4ODJiM2FlNWRlNWRhNzU4Mjc5OGQxYjY0MmMx
YWRiYTI5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0
b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9j
ZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5z
ZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShw
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+
c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2Us
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRy
PFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRl
KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2
NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
CiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7
CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3Qp
IH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBj
b29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4
YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4
ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNz
UHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0
ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vz
c1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjNj
NDI4NzJlMTVlMDNmNWFlNjEzM2JjNWE5MmFjMmFjODE4M2RmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5oCkBAIC00MCwxMiArNDAsMTUgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCisvLyBGSVhNRTog
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGlzIHVubmVlZGVkIG5vdy4KKy8vIFRoaXMgaXMg
anVzdCBhIGxlZnRvdmVyIG9uIENvY29hIHBsYXRmb3JtcyB3ZSBhcmUgdHJ5aW5nIHRvIG1vdmUg
YXdheSBmcm9tIGFuZCBkb2VzIG5vdCBuZWVkIGFuIEFQSSBhYnN0cmFjdGlvbi4KIGNsYXNzIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgorcHVibGljOgorICAgIHN0YXRpYyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIHNpbmdsZXRvbigpOwogICAgIHZvaWQg
c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAg
ICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExl
Z2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hN
YXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2Fk
ZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5t
bQppbmRleCAxNTEyMjkwNDVmMTNlOWNkZGJlMDkxZTYyN2JmYTFmZTIwNmRlMjg5Li4xNGQwYjZi
ZDFkNmU1NTU5ZWM3ZTZiMWEyZmJhODMxYmIzN2FiN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50Lm1tCkBAIC0xMzksNiArMTM5LDEyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQmIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkKK3sK
KyAgICBOZXZlckRlc3Ryb3llZDxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IGNs
aWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5JiBtYW5hZ2VyLCBXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjb3JlUmVxdWVzdCkKIHsKICAgICBOU1VSTFJl
cXVlc3QgKnJlcXVlc3QgPSBjb3JlUmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQ
b2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFk
NWYyOTczNTE3NmUzMWVhNzBmNWVkNTU2Yy4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMxOWRmODkyMTFm
Yzc1NTU2YzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChw
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVh
Y2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAg
fSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vz
c1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2
Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYg
KCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2Vi
S2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9y
eVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsK
LQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAg
ICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBe
ewpAQCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNV
c2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBi
b29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgp
OwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWlu
aUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJD
b3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9
IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0
dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilX
ZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJv
eHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0
MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1l
dGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0
KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
ciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5k
bGVyRGVmYXVsdHNLZXldOwpAQCAtNTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmpl
Y3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBX
ZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9v
bFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRh
YmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5h
YmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4
cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVn
TW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
cHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0
ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAg
IHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vz
c1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25z
dCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50
KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVu
dGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkg
JiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlC
cmlnaHRuZXNzKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJj
NThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJv
Y2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3Jl
KQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZv
aWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQ
YWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBV
UkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9y
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
dWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0g
ICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3du
bG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQog
CkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERv
d25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVu
Z2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29s
IHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRl
KFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigq
bV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsK
LQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwg
Y2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5l
Y3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCku
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1
ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2ls
bFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVz
cG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVx
dWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdS
ZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bv
b2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxs
U2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7
CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJv
dGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAK
QEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFt
X3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+
ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgq
dGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3Vn
Z2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBk
b3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBT
dHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxv
d092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAg
ICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRv
d25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3
cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURl
Y2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6
WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNl
NTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBm
ZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQor
ICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3No
b3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5t
dWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAs
MTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBp
ZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nl
c3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2ls
bEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJG
b3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9h
ZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0
YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5
MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3Nl
cnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQo
KSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWRO
ZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0
aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3du
bG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1f
cHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9h
ZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJv
Y2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fz
c2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9H
KFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFz
c2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAg
ICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0
KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBA
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBk
b3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25s
b2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9s
ZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHBy
b3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkp
OwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAg
IG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBt
X3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3du
bG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJ
RCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxp
ZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93
bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAK
ICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51
bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAg
IFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlN
YXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBm
b3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVs
bHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBm
MmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFm
MjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxE
b3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5
MTZhMGIzMmFmYjM3NzgzZjMwNS4uMjA3NGI2YzYzYTIwMmY2Yjc2NDdhYzZhYzhkNTllOWZkYjU5
MDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDI4IEBAIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQog
CiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nl
c3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlz
LCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpLnN0YXJ0TG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7CisjZW5k
aWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRp
bmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nl
c3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFs
aWRhdGUoKnRoaXMpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgqdGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3Rl
ZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGMxZjQ3MDhi
ODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEyMWYuLjQ1ZDk2NmMzZTRiMGE0MGZkNjc4OTg0
Zjk4Yjk4ZjI1NzkxZjFjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5j
bHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNj
ZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIKKyNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVz
c2FnZXMuaCIKQEAgLTYwLDYgKzYyLDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYgRU5BQkxFKFNF
Q19JVEVNX1NISU0pCkBAIC03MCwyMCArNzMsMTAwIEBACiAjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3
aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZpbmUgTUVT
U0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNvbm5l
Y3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wu
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29sKHBy
b2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+JiBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+
PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpCit7CisgICAg
VmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHByb2Nlc3Nl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5zaXplKCkpOwor
ICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkpCisg
ICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9jZXNzKTsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VzOworfQorCisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWlu
YXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkg
b24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3
ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAo
IVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
dGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcygp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1Nl
Y3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5j
YWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJs
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2ll
U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlm
IChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2Fj
aGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBh
cmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewor
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFBy
aW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAg
ICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1f
dGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtl
VUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFnZXIoV2ViQ29va2ll
TWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3QoKTsKKyAgICBzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1Nl
dCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNz
UHJveHkoKQpAQCAtOTgsNiArMTgxLDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQ
cm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9k
b3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgp
LnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hP
cHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAg
LTEwNSwxNSArMTg5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAgICAgbGF1bmNoT3B0
aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7
CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlv
bnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAg
ICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
PSB0cnVlOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgeworICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9CiAgICAgfQotCi0jaWYgUExB
VEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzUGF0aCA9IG1fcHJv
Y2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0aW9ucy51c2VySWQg
PSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikK
QEAgLTE2NiwxMiArMjQ3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQogCi1Eb3dubG9hZFBy
b3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3Qs
IGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGlu
Z1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJh
bWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsK
ICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFw
ID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9k
b3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNz
UG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAg
cmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUs
IHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdl
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0y
MzcsOCArMzE4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhl
IG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJv
Y2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9j
ZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4LDkgKzMzOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wu
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQwog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7
Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7
Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5B
R0VSKQpAQCAtMzMxLDExICs0MDcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wu
aXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0
VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdhY3lUTFNd
KGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzkyLDExICs0NjMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbgog
ICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0
cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhw
Y19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVj
dGlvbigpKQpAQCAtMTIwNSw3ICsxMjcxLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3MKIH0K
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHBy
b2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5z
KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjUy
LDE2ICsxMzE5LDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Zmx1c2hDb29raWVzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpCiAgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hDb29raWVzKHNlc3Npb25JRCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewot
ICAgIG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3Nlc3Npb25J
RHMuYWRkKHN0b3JlLnNlc3Npb25JRCgpKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQot
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9y
ZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9y
ZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8g
c2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMjgx
LDE2ICsxMzQ4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nl
c3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVE
YXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQot
ICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERh
dGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzEzOTUsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJV
c2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0
cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBp
ZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU1OCwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlk
ZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lv
bklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3Vu
ZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3Vu
ZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHko
Ik5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91
bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9j
ZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2Vi
UHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQg
dmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEw
YjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLmE5Yjg0MTI5MThmYmMxOWY1
NmFhOWY1MDYzN2Q3ZTg2MGExMTFlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBu
YW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2Ug
QVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNl
IFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsK
K2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNz
IFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CiAK
IGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg3LDcg
KzkxLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0
IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQ
cm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRl
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1
eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVk
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwpAQCAtMTAyLDEyICsxMDYsMTYgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVz
aW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
ZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAg
ICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nl
c3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7CisKICAgICB2b2lkIGdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7
CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3Rv
cmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRh
JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJz
aXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+
JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA2LDEzICsyMTQsMTEgQEAg
cHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJu
IG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAg
ICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9
Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4m
Jik7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICBib29sIGhh
c1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCk7CiAgICAgCkBAIC0yMjksNiArMjM1LDggQEAgcHVibGljOgogICAgIHZv
aWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBT
dHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAg
dm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
LCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsyNTYsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVu
dGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7
IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAg
ICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKwogICAgIC8vIEF1
eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzAsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92
ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBj
bGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApA
QCAtMzEyLDggKzMyNSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBI
YXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4g
bV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNr
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Q2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAt
MzUwLDYgKzM2MSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEhhc2hTZXQ8UEFMOjpTZXNz
aW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nv
b2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJj
MTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYg
KG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xh
dW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vydmlj
ZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBv
aW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1
OWIxMDkyMDFiNjEwLi5kODE2MGIwMGJlNDY0YjY0MTJlODg2NzcwNjliNjk5YThiYzg2ZWZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFy
KiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJv
Y2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQ
cm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
Q29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
LSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAt
NjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNs
aWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50Lmlu
aXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0
b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1f
Y29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIg
OiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwot
ICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9i
c2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZl
cnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NE
aWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAg
IEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwot
fQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxT
dHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9j
ZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NS
ZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVB
bGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2ll
JiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQog
ewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtj
YWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUo
c2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
c01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tp
ZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4m
IGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50
VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwg
bWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lv
bklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsx
ODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tG
dW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhU
VFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmlu
ZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMw
Y2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVm
IEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2Vu
ZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29r
aWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclBy
b3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2Vz
cykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lk
IGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAt
MTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsK
IAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAg
dm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAg
IHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJl
ZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5
Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2Jz
ZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50
IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCBmMWE5ZWMzNDg0MTc4N2U0YTg3NTFhYzZmNjc2YWQxYTliZmYxYmM3
Li41YjYyYjE0MmM5ZmYzZmI4ZGY3NjlhNTdmMDJmNWZhMjcwM2M3YjdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJv
bGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vz
c2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMDgsMTEgKzMyMDgsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29y
a2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5E
X0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2Vu
ZGlmCiB9CiAKQEAgLTMyMjEsMTMgKzMyMTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJT
ZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAog
I2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJT
ZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDI3LDcg
KzQ0MTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJs
KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0g
bV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0g
ICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29u
bmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJB
Z2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25u
ZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFn
ZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3MjMsNyArNDcxMyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZy
YW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJy
ZW50RG9tYWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1
ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAg
ICAgIGlmICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAg
ICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJh
bnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJs
ZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRy
YW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAg
ICAgfQpAQCAtNDc2MSw3ICs0NzUxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExv
YWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBp
ZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0
byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkp
IHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0
Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICph
ZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENs
aWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tB
dHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcyLDcgKzUzNjIsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJv
eHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8
fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2
aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwg
TW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFt
ZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJl
Z2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5p
c01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciks
IDApOwogfQogI2VuZGlmCiAKQEAgLTk5OTcsNTggKzk5ODcsMjcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJl
dmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFk
Q2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpj
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJB
ZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0
cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3
ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJM
Rm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0Fz
RXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MzFl
NDUyN2U2MzM0OGRjOTIxYWQ4OWNjZDA5MjFmNDYzMGMzOGIuLmE5OTQ5YjA4OTg0ZjA2MDkwZWY5
MDkwOGE0MGI3YjZkNmZhYzVhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdFQlBS
T0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFu
bmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4u
LikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FS
R1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwg
Zm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29s
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vz
c2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQcm9j
ZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWws
ICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0YXRp
YyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4g
V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7
CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6
OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmln
dXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChX
ZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQb29s
OjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJh
dGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRv
d25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpM
ZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkp
CiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigqdGhp
cykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQ
STo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAgICAg
fSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAg
ICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRV
UkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRh
dGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVj
dHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAg
YWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAg
LTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBw
cm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsK
LQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRz
LmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nl
c3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDEsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZN
b3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsK
LSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1v
dmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpCiB7CiAg
ICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MTAsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mt
PmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2Vk
KHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihjb250
ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lm
IFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1
YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMyLDggQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBm
dWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQ
cmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50
KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6QXV4
aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkp
OworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFs
bE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3Jp
dGljYWwpKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNj
cmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0
b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQg
Zm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdl
IHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBj
aGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAg
Y2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJz
aXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQ
ZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJv
Y2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3
b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25T
ZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCku
c291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1w
dHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vICoq
KioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0
cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1
bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQot
ICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgp
OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAg
ICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRv
IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURh
dGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYg
KCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0g
ICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJl
Y3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU6
OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7Ci0g
ICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
OwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5kRG9tYWlu
czsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgPSBk
b2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUgJiYg
IXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxp
Y2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90
Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsK
LSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0gICAgaWYg
KHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAg
ICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsK
LSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJl
c291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYg
KCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhz
dHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051
bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgot
ICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAg
YXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBhcmFt
ZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAg
ICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwot
ICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERv
bWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdv
cmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVj
dG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3Rv
cmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
c3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NF
UlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7
Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNl
OwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAgICAgICBh
cHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAotICAgIH07
Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIEluaXRp
YWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJz
KSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lRT1Mo
KSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtl
UmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUg
bmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZlIGJl
ZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Npb25J
RCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdl
YnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRh
U3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQ
cm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdvcmtQ
cm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9z
dXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENsb3Nl
KCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1fYXV0
b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nlc3Mg
cHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNvdWxk
IHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51
bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NjQsMjAg
KzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jhc2hl
ZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nl
c3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3
ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2Vi
UHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZN
b3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25J
bmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkgewotICAg
ICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2VzcywgImdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5aW5nIik7
Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHks
IFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9jZXNzSUQg
aWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5
LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWlu
JiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVT
RUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lv
bklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICAvLyBB
cmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xz
KClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSog
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3Mg
OiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3YXJtZWRQ
cm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlmICghc191
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJv
Y2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYgKHByb2Nl
c3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15
UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+
dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0g
ICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
cmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
SUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRD
b25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNz
IChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6
Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4p
LCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2Vi
UHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEg
bmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVu
dGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHBy
b2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
ICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAg
ICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3
ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVu
ZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7
Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
YWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVs
dFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMu
dmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCku
c3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bv
b2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQog
ewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcykp
OwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNT
RVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05
MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnRy
eVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxld3JhcCBm
b3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIFdl
YlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3ZSBkb24n
dCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0b3JlLgot
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1fc2FuZGJv
eEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEwMzIsOCAr
NzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vzcy5pc1Jlc3Bv
bnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uQWN0
aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKICAg
ICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5pbmplY3Rl
ZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAg
ICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+
d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBp
ZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8g
V2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBh
cyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3Jl
YXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2Ug
aGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50
LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
ID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAg
ICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVu
Y2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVz
ZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0g
ICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nl
c3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtl
clByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29y
a2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEz
NjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNp
dGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVz
dWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhh
c2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdl
SUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAg
ICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEsNyArMTA4Nyw2
IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
Ojpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5p
dGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwot
ICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAog
ICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpA
QCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93
bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogI2VuZGlmCiAg
ICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxv
YWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9j
dW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAg
VVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBh
Z2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmly
c3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0
aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAg
ICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFn
ZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsK
LSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVl
c3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3du
bG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsK
KyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9y
aWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlh
dGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5p
dGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAg
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51
c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0
YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNp
dGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1
Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAg
LTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25s
b2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0YSYgcmVz
dW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkg
PSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRp
YXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0KLQorICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxv
YWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBAIC0xNTE3LDEx
ICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiAjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3Jr
UHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwotfQot
CiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkK
IHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9jZXNzLT5w
cm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAsMTggQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
LSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hl
bWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpOwogICAg
IHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAgICBzZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJM
U2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZv
clVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEyNTQsMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwo
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNj
ZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSksIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
RGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYwNiwxMCArMTI4
Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3Jr
UHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVy
bFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJl
Z2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgog
ICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9y
ZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNs
eUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9y
VGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJ
bnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRE
ZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQogCiBE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5m
bykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFj
a2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3
b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNz
ZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0g
bV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJt
aW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJl
cGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
OwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29y
a2VycygpOworICAgIHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2
aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywy
MSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRz
IGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sg
b24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBw
cm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3Mg
OiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10gewor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsx
NzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3Mp
IHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdl
SURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdv
cmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0
ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBh
Z2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBA
IC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVN
ZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6
YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VX
b3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
V1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsK
KyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8m
IHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYw
OGI5NTBiNmFiNzEuLmViYmNhYTRlY2IxZDczNzE3YjFhMzU0ODJhNzJmYTljZjRkZTFlNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdl
UHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQo
c2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2Vz
cyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rp
b24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9j
ZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6
U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3Ig
TmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNo
TGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQ
cm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5
LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20g
dGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkq
KTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJp
bWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dl
YnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7
CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwg
U3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmlu
Zz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAg
IFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJl
d2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0lu
V2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0
UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMw
Nyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJD
b250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAg
c3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAg
ICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQog
ICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7
IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdl
UHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
dm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2Vydmlj
ZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdv
cmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNp
emUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVy
SWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29y
a2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNl
V29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5k
QXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7
CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4
LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpD
cm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAg
ICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVn
SW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczsg
fQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9v
bCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsg
cmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxF
KENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQo
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxT
dHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTQzLDYgKzUxNSwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0
cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2lu
Z0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0Rp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CkBAIC01NTYsOCArNTM5LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0
ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwg
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJt
ZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2Vy
RGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRh
JiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAK
QEAgLTU4MSwxNCArNTYyLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlBy
b2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rvcnko
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAs
OSArNjAzLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRy
PFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQg
V2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0Zv
cldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Fs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3Ry
aW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNl
c1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29u
dGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2Vy
dmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MjAsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlx
dWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlv
blNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2NTEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91
YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhh
c2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjgzLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9k
aWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAsNyArNzg3LDcgQEAg
cHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNh
YmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uOwpAQCAtODMxLDIwICs3OTgsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYg
bV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NS
ZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVz
c2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAwODNhN2U3OWE2ZGViZjBmMjk4
Y2FjMjk5MmUyNzIzMGFhYjViMWFlLi5mN2UwYzFmNzY1ZjNiNDU3NTZkMGM4MDRhOTA4NjliMGE4
YjkxOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
QEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVw
bHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0
aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7
CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KaW5kZXggZWVlNzhmYmM5ODg2NDk0NzZkMTA5NWI0OWNmMTA2YzE4NDQ1ZDI0NS4u
OGI2ODk2MzQ4YzZmMmZkZmNmZGRlMTQ4ODk2MDE1ZjM2MzJkNjQ3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0
Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01
NjMsNCArNTY1LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3Vu
ZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkK
K3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVk
NGMyMDUwMzdkLi5jYWE5ZGM0OGU5YjVhYjk2NmU4MTNkYjYyMzViZGYxZDhiYjExYTE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBA
CiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURh
dGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAgLTgzLDEzICs4OCwyOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxs
b3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQor
CisvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0
b3Jlcy4KK1ZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBz
dG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51
bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFt
ZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVh
dGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0
YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50
OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBA
IC0xMTUsMTAgKzEzNiwxMSBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTUwLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQ
cm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nl
c3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAg
IGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0K
IApAQCAtMTY5LDE3ICsxODYsMzIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9
CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQorewor
ICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vi
c2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAh
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVy
biBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisg
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29y
a1Byb2Nlc3MoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9u
SUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4o
KnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVn
aXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjI3LDYg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQ
cm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICBy
ZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwot
fQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0Njgs
MTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0
YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5
cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5z
dXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBA
IC00NTgsNyArNDgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBs
eShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVn
YXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0
ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNzI2LDE1ICs3NTEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2Fs
bFRpbWUKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQo
KSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHBy
b2Nlc3NQb29scygpOworICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3Qg
dG8gaXRlcmF0ZSBwb29scyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtNzQyLDcgKzc2Niw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTg5MywxNCArOTE3LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAg
ICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAg
ICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0
LDEyICsxMDEzLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9u
bHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0g
ICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcg
KzEwMzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMs
IEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVX
ZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29v
a2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2Nh
bGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KQEAgLTExODAsMTggKzExOTcsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUK
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHko
KSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNv
bmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMjEyLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5
Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Np
b25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9z
ZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3Qg
cHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTIxMSw4ICsxMjIxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb24KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdl
dENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJn
ZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEyMzAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNl
Y29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTIzMSwyMCArMTIzOSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
IGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEyNTcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEy
NzMsMTIgKzEyNjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4
ICsxMjgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyOTcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzMjIsMTIgKzEzMDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMyMyw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEzNTMsOCArMTMzMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzNjgsMjIgKzEzNDYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzY3LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VV
UkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJM
JiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEzODgsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhj
b25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJv
bSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0
MiwxMiArMTQwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxNDEyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJM
JiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRv
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVk
RnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTQ3NiwyNSArMTQyNCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTUwNiw0NiArMTQ0MywyNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5
KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91
bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE1NzcsMzUgKzE0OTUsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8
dm8KIAogICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9
IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
SW1tZWRpYXRlbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEp
IHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3Zl
KGRhdGEpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9CisgICAgLy8gRklY
TUU6IGNhbGwgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkgaGVyZS4K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFy
eShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9u
SUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
Y2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUyMSwxMyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2lu
ZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0
aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3RpY3NE
YXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYg
dXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MzksMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRM
YXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
c2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1f
c2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBT
ZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVu
dCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCAr
MTU1OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQ
cmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVy
YWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJl
dmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1By
ZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTY4NSwxOCArMTU3MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGly
ZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTg1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUK
ICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNzE2LDcgKzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29s
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE2MDQsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNl
Y29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjE4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFk
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTY0Miw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5E
YXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
VXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTY1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY3OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNlSVRQ
RGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2MiAr
MTY4OCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVj
b3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBP
bmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3Rv
cmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9u
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29s
IGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsx
NzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Mu
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzU4LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhi
b29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE5NDEsMjAgKzE3NjYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29y
ZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJD
b3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25z
dCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc4NSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5n
KCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0
cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJM
JiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTk3OSwxOCArMTc5NywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2NhbFN0
b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxT
dG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3lu
Y0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMo
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xOTk4LDggKzE4MTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MjEsMTIgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRz
IHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5y
ZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNz
UG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8q
IHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQot
ICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29s
Pj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsK
ICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIw
NDMsOSArMTg0MSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQ
b29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBs
ZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3Nv
Y2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAg
ICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIwODQsOCArMTg3OSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlhS2V5
RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0
aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZp
Y2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChj
ZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9yPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlPcmln
aW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAsNiAr
MTkzNCwzMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25zdCBT
dHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRl
cm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWlu
ZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNz
RGlkUmVzdW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCkBAIC0yMTY5LDE3ICsxOTg3LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAg
ICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUp
KTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAw
KTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBt
X3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAg
ICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxz
ZQpAQCAtMjE5MSw4ICsyMDA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAg
ICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIy
MTEsOCArMjAyNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNDEsMTUgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJh
bChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5p
c1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
I2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
RGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDcxLDE5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5X
ZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAg
IHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tp
ZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5k
aW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29v
a2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6
Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsK
LX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17
Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0g
ICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJT
b2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsK
LSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Np
b25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5j
dGlvbikKQEAgLTIzMjksOCArMjEwOSw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZO
ZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29v
a2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9j
b25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5k
bGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
QEAgLTI0MzUsNyArMjIxMywxNCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29y
a1BhcmFtZXRlcnMocGFyYW1ldGVycyk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRl
VHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJt
aXNzaW9uKCk7CisjZW5kaWYKIAorI2lmIFVTRShTT1VQKQorICAgIG5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0K
IApAQCAtMjQ2NSwxMCArMjI1MCw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0
YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZv
aWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAt
MjQ3NiwyMyArMjI1NywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFn
ZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlz
KS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAg
ICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRh
aWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAg
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1
b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjkxLDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9y
ZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9v
bCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExB
VEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAs
MzUgKzIzMDgsMTkgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmlj
ZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRk
U2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2lu
SW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVP
cmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlw
ZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9V
TkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBC
b3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5j
bGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNU
b0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMjU4MCw3ICsyMzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3
YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAog
ICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0
KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1
bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3Jl
LCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM1MCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNTgsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJ
ZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRl
bnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRp
ZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXgg
ZTFiNDBlZDI1ZDg2NWU0YzJiYzQ3MjQyM2NhYzZiZjQ1YmFhYzdkZC4uMzk0M2I1YTg2ZTYzMDFk
MWVmYTEyOTBlOTkyYmI3MGUwZTE3OGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3Mg
U2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3Mg
TmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwog
Y2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcg
KzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFT
dG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQg
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+
JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29u
c3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFt
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nl
c3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNyArMjQ2LDExIEBAIHB1YmxpYzoKIAogICAgIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJu
IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBpc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2ll
KGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygp
OwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAg
IHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKQEAg
LTI3Miw4ICsyNzcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRp
b24mJik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQog
ICAgIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkg
eyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYgKzI4
Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwm
JiwgVVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAg
ICAgV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTksNyAr
MzY0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3Qg
U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
KTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzk3LDggKzQw
Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQgeyB0cnVlIH07CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBt
X3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4g
bV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxz
ZSB9OwpAQCAtNDE5LDYgKzQyMiw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0
b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291
cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNkODE5YjZkY2NhOGFjNTA5MmEz
MGRkOTNjNTNiOGVlOTM0Mi4uNWJhMzkwMGQyZGFmZjA1NmFiZDBjZGYwNTdhZTMyODU0ZWJmZWNm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKQEAgLTM5LDggKzM5LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV9wZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQ
b29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQs
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRh
NDg5NTEzNzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJv
eHlHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQ
cm94eUdMaWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0
Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAg
ICAgICAgIGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vz
c2VzIGRvbid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5
IFdlYnNpdGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAv
LyBUaGUgcHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBp
cyBkaWZmZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAg
ICAgICBkYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAg
ICAgICAgICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94
eVNvdXAuY3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTku
LjA4OTI4ZmNkMzE2ZDg4ZjlkNTE1MDBlYzY4NGFkMWI2NGFmOGEzZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlT
b3VwLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogewogICAgIG1fY29va2llUGVy
c2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBh
dGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFn
ZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdl
UGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRhYy4uMDc5
M2VkNTEzOTE1MjhkOWI0YjlmZGIwZjRhZDNjODk2MGZkYTUyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcsMzAg
KzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
cyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1FOiBt
X2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUg
b3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91bGQg
YmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNvb2tp
ZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFy
YW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJhbWV0
ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0ZXJz
LnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAgbV9pZ25v
cmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBO
ZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgbV9uZXR3b3JrUHJveHlTZXR0
aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1By
b3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYmNi
ZThkZjYyNTk4NDMxOTA3ZGVmYjQzOWU5ZGJkZDkxMjM5MTQwLi5kZGFkNDhlYjc5YWZlYzQ2Mzg5
N2NiM2MyNWY1NGQwNTM1YmI2ZTI4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAtMDktMTkgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQ
cm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFT
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgt
W0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToK
KyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxd
KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29u
c2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFk
anVzdENvbnRleHQpOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBha10gd2Via2l0LWJ3cmFwIGRyaXZlLWJ5IGNs
ZWFudXBzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3
b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi4zM2Y0
NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNmNmYwOWM5ZjRmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTE0
Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNo
RmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3Jr
IHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwg
dGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBu
ZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0
aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVs
ZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1OWYyMjhhN2U4YmQ3NDk3
MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNmY2Q4N2JmMjA0NWViYjNmNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9h
ZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJl
ZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNl
aXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8g
U3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1
cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENh
bmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRl
eCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2MTYwLi5kNzdhNmZkOTg3OWU0
M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCkBAIC0zMSw2
ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWRE
QiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFkMjQzYzRmZWI1OGFjOTg0ZGFm
MTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRkYjllMzQxYjY0ZjljMDA4ZjRj
NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJh
c2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUz
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFkMGJkMmM4YTRhYTRmMjdmZWQu
Ljg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3NTUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBn
cmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1
OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9y
eQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMyNDVjOTA1M2ZkMTdlZTU5NTZm
YTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3NjFkNDNkIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRo
IG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAg
ICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tp
bGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRh
dGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYzNzg1MThkOTNlMGEwODIxZjYz
MDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEyYTE0ZWQwNTFlZDZlYSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJE
YXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NL
aWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVz
c2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFk
ZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5h
bWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZp
bGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRlYjc2NWEzMTY4MjEyMGQ3NzMu
LmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVmZDUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxl
TmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2Fn
ZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVzdCgpCitz
dGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkKIHsKICAg
ICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJM
ID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBA
ImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtu
ZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxl
X18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTCA9
IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VE
aXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJl
Y3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAvLyBGb3Ig
ZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hvdWxkIG9u
bHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNlRGlyZWN0
b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcgQEAgc3Rh
dGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3ROYW1lKQogVEVTVChJbmRleGVk
REIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJub25lIik7
Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KaW5kZXgg
N2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYzMi4uNmY2N2RjMjdlZGMzZDI3
NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQu
aD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVy
XSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxl
ciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVmNzM4NjNhZWRkY2I5MTkw
YjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYwNjk2N2MzYjY0M2JmZDYyZjli
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3ID0gbmlsOwogCiAgICAg
Ly8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0ZXN0CiAgICAgd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0y
NjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlGcmFtZUhh
c0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBhcnR5IElEQiBzdG9yYWdlIGlz
IHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBhdXRvIHRoaXJk
V2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlX
b3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcg
PSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgbG9hZFRl
c3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBjcmVhdGVk
Iik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0MWUzYjBlNWNkYTNhM2I1
NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0NzgyZWY5ZDg3ZjI1YWRj
OWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05NSw3ICs5NSw3IEBAIFRF
U1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAgICAvLyBUZXJtaW5hdGUg
bmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAgd2ViVmlldyA9IG5pbDsK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7
CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGgu
Z2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KaW5k
ZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVlZi4uNWY3OTE5MDk0M2M3
NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3Rl
bmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3
ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
IEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBi
b2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0
TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsK
IAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScp
IiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBA
QCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAg
ICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJmMDcxMzBhOGQuLjBlMjFm
OTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAt
MjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwg
TmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtw
b29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5y
b290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRl
RGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXRO
ZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVY
UEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bv
b2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJl
IGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJL
aXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFkMjUyZTU5ZWM0OTEyNTBi
NDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUxMDgzMmJlY2Q5ZDQ4OTM0
YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3Zl
cnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggOTVkYzlkOThk
ZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRkYWRiZGQxZWUyODNmODY1
YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01
Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0
ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJW
aWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVh
ZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIzNTA1NWIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBh
dXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
TmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4
LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZy
b21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogewor
ICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAg
YXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVh
c2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFz
ZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0g
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0g
W2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRi
Il07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwu
cGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1By
b2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0
c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJ
dGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07
CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZp
bGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAgIGF1dG8gKmRhdGFTdG9y
ZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpk
YXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRv
bmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9y
RGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFy
ZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAg
IFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAg
ICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxl
ciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmlu
ZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlmOGYuLjJmOGUzNGRiYTZk
YTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBA
IC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUp
CiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFn
ZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2Fn
ZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhF
eHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2Vu
dCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAg
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJl
c3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAg
IGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHRE
YXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVy
KHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9
LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtl
clByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3Vy
YXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBvcmlnaW5hbFByb2Nl
c3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAogICAgIGRvbmUgPSBm
YWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2Vydmlj
ZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBF
WFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2Vy
dmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdu
b3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4K
ICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1RfRVEoMXUsIG9yaWdp
bmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogICAgIFtb
Y29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBk
aXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAgZG9uZSA9IHRydWU7
CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXplX3QgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBi
CiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2Vi
UHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMs
IE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIE91
dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKwor
VEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RM
b2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VX
b3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRB
Ym91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVm
b3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJvY2Vzc1NlcnZpY2VX
b3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1
ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VR
KDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJz
LCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9jZXNzU2VydmljZVdv
cmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVl
OworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEo
MnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0NCwxMSArMTk1NiwxMSBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nlc3MpCiAKICAgICBFWFBF
Q1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAg
W3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBh
YWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0
NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBA
QCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkg
cHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdv
cmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0g
Y2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1
bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1
ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFBy
ZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5T
U3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAo
dm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFs
dWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBm
aW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJp
bmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1
dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAg
cmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycp
OyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0g
PSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2lu
KCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29r
aWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBb
W1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNI
VFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVy
dGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBD
b29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFs
dWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAu
MC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2ll
U3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAg
ICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0
V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZp
ZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19T
VFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29s
RXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBl
cGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0
ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3Jl
LCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAg
TlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3Vt
ZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3Ro
OyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQo
KTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxv
YWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29r
aWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJd
XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Np
b25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNF
cXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VS
TFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUx
MTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNj
aGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
I2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1l
SGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAg
W3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5G
bGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4
IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUuLmJmOGJkZTgzMWEyODU5
YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUK
ICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcg
YXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5l
d2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQg
ZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRh
UmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29v
a2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29y
ZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hv
dWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92
ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tp
ZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFu
ZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRl
ZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3
ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1d
OwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1Nyw3IEBA
IFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAg
ICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9G
QUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFkYmNlOWY2MDRhZjhkYjRkZDE0NWRlMGNjMDY1Y2NjNGI2NGVjZjUuLjRiM2MxOTNiMDQ1
MDg1NDA5OTM1NTA3YTdlNDBhODQyNGMyYzc4ZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDY0LDggKzEwNjQsNiBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwg
dHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGlu
ZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4
dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzOSw3ICszMTM3LDcgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5h
dGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTcwLDkgKzMxNjgsOCBAQCBQbGF0Zm9ybVdlYlZpZXcq
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcq
IHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9w
dGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0
Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0
aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRl
eHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409214</attachid>
            <date>2020-09-19 16:34:05 -0700</date>
            <delta_ts>2020-09-21 12:36:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200919163403.patch</filename>
            <type>text/plain</type>
            <size>315485</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBmY2FmY2FlZDMzOWZhYmRh
N2I0OTk4ZTIwZTViYjRlMDliYzJlNzcuLmNmNWEyNTJmZDIyMDIxMzljYjMyODdjMDA2Yzg2N2Jm
NTRmOGJlZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTkg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBydW50aW1l
IHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgQ3Jvc3NPcmlnaW5SZXNvdXJjZVBv
bGljeSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRleCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1
MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTkyNTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29v
a2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKaW5kZXggYmU4ZDk2NjYyYmU2ZGNkODVmYTNjMzI5MjlhZTBmMGI1ZDE4MjM0My4uN2Y0Nzc3
MTMyZDUyNDc1ODE4Mjk4MWFhZjBjMThiNzJiN2JhMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTM0NywyOSArMzQ3LDE5IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3Rv
cmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAg
IGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0
YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBX
VEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0g
dHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tp
ZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAg
fQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTUwNSw4ICs0
OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNl
bmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjEsNyArNTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29s
IHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VT
dHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2Ug
aWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAg
ICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3Jl
YXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAog
ICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkg
ewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0
UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVy
biAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikK
IHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8m
IHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAg
ICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZj
MzdkZjI4YWVlYTA3YWY4My4uZGM4NmYzOTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNi
NzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2ZmRhMTA0YmYuLjAyZGRiOTIzNGU5OTljM2U2Y2RjZGNm
MGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBA
IC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nl
c3NTREtWZXJzaW9uOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0
LmdldCgpKTsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQog
ICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAgIGVuY29kZXIgPDwgaWdub3Jl
VExTRXJyb3JzOwpAQCAtNjgsOSArNjgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29k
ZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIGVuY29kZXIgPDwgdXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5kaWYKICAgICBl
bmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAgIGVuY29kZXIgPDwgZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE2LDExICsxMTMsMTEgQEAgYm9v
bCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYg
ZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAg
ICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVj
b2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVy
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1
bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwog
CiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNj
ZXB0UG9saWN5KSkKQEAgLTE0MiwyMCArMTM5LDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9B
Y2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRpb25h
bDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGREaXNh
YmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQyMTBk
OWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIxMDc3ODM1ODQ4NDZjOTBkMDEwYTAzNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTcxLDcgKzcxLDcgQEAgc3RydWN0IE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3
b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAg
IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2Vi
Q29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NSwxMiAr
ODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IGRhNjM1OTEy
NDIyM2RiOTcwMzBkMWVhNzdiYzAwY2VlNTFmYjAxN2QuLjUwMTBmOWE4NjkwMzkwZGZmZTlhMzQ0
ZTk5MDViMjRlNjY4NWM3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2Nv
YShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDIsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29h
KGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hl
OnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwot
fQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRp
b25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRf
REFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3
b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5
Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
CiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+
IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENl
cnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2
YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4
NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwx
MSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3Jl
U2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNz
Q29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJh
bWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBp
ZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRl
bnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIp
OwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
biwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1
aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1By
b2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNv
b2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENv
b2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQs
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXgg
NDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgz
MGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSAr
MTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMo
cGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhi
b29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3Vs
ZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQw
NTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRk
Y2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAg
ICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1
aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVy
cy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwot
ICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsK
LQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAg
aWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5o
CmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcw
MTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBA
IHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhf
dD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJj
MDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2My
M2E5NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFj
ZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vi
c2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVT
dG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29r
aWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3Vu
ZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxs
Q29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAg
ICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdD
b29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxD
b29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRh
YmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNv
b2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENv
b2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVz
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsK
ICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewot
ICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Np
b24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29y
ayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAg
ICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0
b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0
ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
ID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9u
KQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+
cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRl
bGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAg
ICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29r
aWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENv
b2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhl
IENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5
KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFn
ZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJl
Z2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAv
LyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhl
IG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgp
OwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0
cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsx
OTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBt
X293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
OwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5n
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lk
IEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVy
KTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2Vi
UHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRh
U3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3Mg
cG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3Jl
Ci0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhp
biB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAg
ICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAg
ICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9j
ZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZs
dXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNv
b2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFi
ZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5o
CkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3Jl
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxE
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2ll
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1
OGM1NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi42NWY4YjUzZjViM2QzMDVj
ZjI4MGJhNWQzMGFhZTM3YjM5YWNmNDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRl
eHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3Rv
cmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2Fy
YmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JU
aW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBi
b29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
cihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1
Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwxMSArNTYzLDYgQEAg
dm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CkBAIC01ODcsNyArNTcwLDcgQEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNl
V29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdp
bihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0cmlu
Z1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRlbnNp
b25zUmVmKQpAQCAtNjE5LDEyICs2MDIsMTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRN
b2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rp
bmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQcmlt
YXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewotICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6
OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oCmluZGV4IDFkOGZhYjhhMTQ4NmFhZGI0OTQxNDRiOThmMTBlOTM2Mzhk
MGM1ZTYuLjJhYjZlZjg2ZjUzMGU3N2Y3NGNiZDVkZjU4NjJhYzRkMzBiNzk4NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCkBAIC0xNjgsNyArMTY4LDYgQEAg
V0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U3RvcE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJz
aXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJ
VEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAK
IFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9y
ZSk7Ci1XS19FWFBPUlQgV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQg
V0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYgV0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdL
Q29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRl
eHRHZXRJY29uRGF0YWJhc2UoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
KFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1F
TlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggYTAyNTAxMWY3
MGNjNjU5ZjVmYWEwOGE3ZDZjYmIzZmY1NmVlNmEzOC4uZDgzOWNhY2IyOGJhNTY1ZGM5NWE4Mzkz
YmZjY2FiOTM4ZGFkY2M1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaApAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0V2FybUluaXRpYWxQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNv
bWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJlbW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
ZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7
CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lk
ICgqV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihX
S0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggOWRkYTU5MWM5NTE4OWFiMGMyNWFjNTU0NjZjMGEyYmZj
MzkyN2ViYy4uYjc4YTkxZTMzZWRmOWUyOTRiYjRkOGQ0YzBkZGY1N2NlNTAxNmI3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCkBAIC02OSw2ICs2OSwxMSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJz
aXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgq
V2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiksIHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0K
IAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9y
ZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3Jl
UmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVuY3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgz
ZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4uYzNmYTFiZjNmOTI0OGMyZmU0OWJlMTI0Mzk2NDQxMWY4
MzFkMmE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAgLTUwLDYgKzUwLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0
aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUp
OworCiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5
cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlv
bikoYm9vbCBpc0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYz
MDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uYTgwMmI5N2M3YjQxNmY5NmJi
YTU0ZmViZTdhMWRkZDQzODNkMGJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lu
cygpOwogfQogCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9j
ZXNzUG9vbC0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17
Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQog
LSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMywxMiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOihCT09MKXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKIH0KIAogLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVy
biBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAw
OwogfQogCiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTU2MCwxOCAr
NTM4LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPnNldENv
b2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKLXsKLSAgICBfcHJvY2Vz
c1Bvb2wtPnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Ci19Ci0KLS0gKHZv
aWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxv
d3MKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQb29sLT5zZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgot
fQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKGlkIDxfV0tHZW9sb2NhdGlvbkNvcmVM
b2NhdGlvblByb3ZpZGVyPilfY29yZUxvY2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYwNCwxMSArNTcw
LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50
Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJv
dGVjdGlvblNwYWNlCiB7CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRp
YWxzRm9yUHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9u
U3BhY2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKaW5kZXggNjc2OTAxNWUwODU1ODk5NGNkOGEyMTlhMTdh
OWM2OGFkZTNiNTM4My4uYmY0OGNhMWM1MmMyMjE5NzM2OGI4ODI5MDUwNzIyM2YwZjIwNmNkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3LDEwICs4Nyw2IEBACiAtIChfV0tEb3dubG9hZCAqKV9y
ZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHdlYnNpdGVEYXRhU3Rv
cmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAgcGF0aDooTlNTdHJpbmcgKilwYXRo
IG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuIFNo
b3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29udGVudCBwcm9jZXNzZXMgYXJlIHJ1
bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQp
X3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBp
b3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBAIC0xMjIsMTMgKzExOCwxMCBAQAogLSAodm9p
ZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRF
RF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29z
KDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0
IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4z
KSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5n
OihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAq
PiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9
X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFn
ZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tp
ZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9z
KDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wp
YmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAog
Ly8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0
aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VS
TCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxk
U2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29t
cGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5
OTIzM2VmNGYwYjk1Mzg5Li5hZTljNDUwNzc5MDg2Y2MxZTMxMTRjZTEzZjJkMjE4OGU3ODdmMTRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJL
aXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRh
UmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNp
dGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0
bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVn
YXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMs
MzIgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVE
YXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNp
dGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRh
U3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBf
d2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0g
KHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYmFja2dyb3VuZCk7Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmlu
ZGV4IDk5MzIwMTA0NmI1NTFjM2YyOGRmMmRjMGEwMzQ2ZDdiYzc5YWM1ZjQuLjQyMTVkYjc0N2Jh
MzIyZmFlYjhhNDdlMTY3NWE2NTgzODE0NzI2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aApAQCAtODUsOSArODUsMTcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dl
YnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlvbnMpIHsKIAogLSAodm9pZClfcmVuYW1lT3JpZ2luOihO
U1VSTCAqKW9sZE5hbWUgdG86KE5TVVJMICopbmV3TmFtZSBmb3JEYXRhT2ZUeXBlczooTlNTZXQ8
TlNTdHJpbmcgKj4gKilkYXRhVHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyOwogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG51bGxhYmxl
LCBub25hdG9taWMsIHdlYWspIGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxl
Z2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gKl9jb25maWd1cmF0aW9uOwogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9O
T05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQx
NDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5ODM2ZWU0NGY5YWNmMGUyNzBkNzBjOTVkMTZiZTY3OGQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAog
c3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5JiBjb29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRh
TWFuYWdlcik7CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAg
IH0KKwogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENv
b2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUo
KQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9i
c2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5h
Z2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAg
ICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEz
OSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNy
ZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5h
Z2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFn
ZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0
KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5h
Z2VyOwogfQogCkBAIC0xNzMsOCArMTc3LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
c2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAg
IGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQ
b29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29r
aWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTk1LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
V2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUiht
YW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7
IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsyMjYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2Fu
YwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCks
IHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5
LDExICsyNzEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1v
dmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29r
aWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUp
IH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9v
bGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzE4LDcgQEAg
dm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5w
cml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFz
ayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdM
aXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDog
Y29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2ll
c0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciog
bWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAg
R1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNl
bGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQv
d3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxl
c3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVz
ZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBX
ZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBt
YW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA4OWJlNTZhZDcxZDcxNTY5MTJhMjY5MTUzMDU3
ZGY1MjdjZGQ0NDYwLi5iN2VkODgyYjNhZTVkZTVkYTc1ODI3OThkMWI2NDJjMWFkYmEyOTY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJD
b250ZXh0LmNwcApAQCAtNDA0LDcgKzQwNCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRl
eHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRh
TWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2Nh
bC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCks
IG51bGxwdHIpKTsKIAogICAgIHByaXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURh
dGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0
ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNz
YWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAg
ICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2Vy
TWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1l
c3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CmluZGV4IDRhYjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZh
ZTZjNDNjMjZiZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CkBAIC0xMzkyLDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5n
bGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29v
a2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0
YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2Vi
Q29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2ll
IH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAg
IH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAog
ICAgIFN0cmluZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2Vi
Q29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNz
aW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0p
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkw
Yjg1YTFhZDA4YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94
eSgpOwogCiAgICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXIm
IHRocm90dGxlcigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRl
eCBkYmU0NGY5NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi4zYzQyODcyZTE1ZTAz
ZjVhZTYxMzNiYzVhOTJhYzJhYzgxODNkZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQuaApAQCAtNDAsMTIgKzQwLDE1IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAorLy8gRklYTUU6IEN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCBpcyB1bm5lZWRlZCBub3cuCisvLyBUaGlzIGlzIGp1c3QgYSBsZWZ0
b3ZlciBvbiBDb2NvYSBwbGF0Zm9ybXMgd2UgYXJlIHRyeWluZyB0byBtb3ZlIGF3YXkgZnJvbSBh
bmQgZG9lcyBub3QgbmVlZCBhbiBBUEkgYWJzdHJhY3Rpb24uCiBjbGFzcyBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKKyAgICBzdGF0aWMgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBzaW5nbGV0b24oKTsKICAgICB2b2lkIHN0YXJ0TG9hZGlu
ZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29s
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFsOwogICAgIHZvaWQgc3Rv
cExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Q
cm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBIYXNoTWFwPExlZ2FjeUN1
c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sTG9hZGVyPj4gbV9sb2Fk
ZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KaW5kZXggMTUx
MjI5MDQ1ZjEzZTljZGRiZTA5MWU2MjdiZmExZmUyMDZkZTI4OS4uMTRkMGI2YmQxZDZlNTU1OWVj
N2U2YjFhMmZiYTgzMWJiMzdhYjdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5tbQpAQCAtMTM5LDYgKzEzOSwxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAorTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpCit7CisgICAgTmV2ZXJE
ZXN0cm95ZWQ8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBjbGllbnQ7CisgICAg
cmV0dXJuIGNsaWVudDsKK30KKwogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYgbWFuYWdl
ciwgV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgY29yZVJlcXVlc3QpCiB7CiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1
ZXN0ID0gY29yZVJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05v
dFVwZGF0ZUhUVFBCb2R5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZl
MzFlYTcwZjVlZDU1NmMuLjEzNjcwZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29s
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRl
ZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3Vw
cHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdD
YWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5Mywy
MiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBO
U051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5j
ZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1d
OwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2Rl
ZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAog
ICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwl
QCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVk
S2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJz
aXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nl
c3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1f
dXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9v
bDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBl
bnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51
dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9S
TShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4u
ZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUs
OCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nl
c3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERv
d25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAg
bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2Fk
UHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBE
b3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09B
KQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7
Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhh
bmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25s
b2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVu
c2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJM
LCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDEx
ICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0g
ICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRh
U3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlE
LCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBu
dWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6
d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3Qg
UmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVz
dCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdS
ZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwo
KSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAg
ICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNz
UHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94
eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBh
dXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMt
Pm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYg
KzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xp
ZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVu
YW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9
IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3Rp
bmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUg
YWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0
aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAg
ICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBk
ZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxs
b3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwog
ICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVk
YmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERv
d25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJv
Y2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJv
Y2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNz
ZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5n
LnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQg
RG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2Vz
cykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAw
KTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgp
LCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93
bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5m
bywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93
bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFr
ZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQg
ZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7
CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3Jr
aW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9u
VHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vz
c0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBl
OjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3Vz
cGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZv
ciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNz
LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93
bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5
LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25s
b2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94
eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1
NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9h
ZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9j
ZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFT
U0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3Mt
PnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5p
bnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0x
MzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAg
IGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAg
ICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZh
bGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3du
bG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3du
bG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAg
IG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRh
dGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2Vz
cyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJj
ZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1
MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0
Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94
eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIz
Nzc4M2YzMDUuLjIwNzRiNmM2M2EyMDJmNmI3NjQ3YWM2YWM4ZDU5ZTlmZGI1OTA3ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwyOCBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1
c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VzdG9t
UHJvdG9jb2xJRCk7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworI2VuZGlmCiB9CiAKIHZv
aWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjdXN0
b21Qcm90b2NvbElEKTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJv
Y2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlz
KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKnRoaXMpOworI2VuZGlmCiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3Qo
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEy
MmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi40NWQ5NjZjM2U0YjBhNDBmZDY3ODk4NGY5OGI5OGYyNTc5
MWYxYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2Fj
eUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBA
IC02MCw2ICs2Miw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3Ry
YWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElN
KQpAQCAtNzAsMjAgKzczLDEwMCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5o
PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0so
YXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQ
cm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNB
dEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkK
K3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1Nl
dCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAg
IHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8
TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9j
ZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nl
c3NlczsKK30KKworCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7Cisg
ICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWlu
IHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0
aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAg
ICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xv
Y2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNh
Y2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgp
OworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2Vi
UHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNv
bnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVz
RGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVE
aXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25s
eSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2Vu
ZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CisgICAgc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwg
MCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlz
UnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYg
KHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nl
c3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQog
I2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigq
dGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAg
ICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhp
cyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAg
LTk4LDYgKzE4MSw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94
eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhp
cyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9j
ZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzE4
OSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vz
c1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAg
IGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNo
T3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2Up
OworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlT
VEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5l
dHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNz
UG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNv
bm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIg
KzI0NywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29y
a1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEm
IGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFt
X2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlx
dWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94
eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291
cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rv
d25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9v
bCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMxOCw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsK
ICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHBy
b2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHku
IFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszMzksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVj
ZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQog
CkBAIC0yNzQsOCArMzUyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8g
cHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYg
KG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlk
YXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMz
MSwxMSArNDA3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdv
cmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQ
YWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdl
KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM5MiwxMSArNDYzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hM
YXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5k
aWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlv
bl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAg
LTEyMDUsNyArMTI3MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1MiwxNiArMTMxOSwx
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vz
c2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Np
b25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV9zZXNzaW9uSURzLmFkZChzdG9y
ZS5zZXNzaW9uSUQoKSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS0+
cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Npb25J
RCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURh
dGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRvIHNlc3Npb25JRCA9
IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKKyAg
ICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTI4MSwxNiArMTM0OCw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiAKIFdlYnNpdGVEYXRhU3RvcmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6Ondl
YnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgaWYgKCFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpIHsKLSAgICAgICAgICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29s
LndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVN0b3JlICYm
IHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IHNlc3Npb25JRCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgfQotICAg
IHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQpAQCAtMTMzNyw3ICsxMzk1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnQK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJs
ZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3By
b2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWlu
IHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0
aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikK
QEAgLTE1MDAsMTYgKzE1NTgsMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25u
ZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFn
ZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29s
IGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewor
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNz
ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
CiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7
CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAg
ICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eSht
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5n
IGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCku
aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxl
cjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nlcykp
IHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3Mp
OwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRU
cmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBhMGI0YzFkODkzOGUy
MDVlYzM2MWRlNWMxMDgyNWQxODI3NzY1M2I0Li5hOWI4NDEyOTE4ZmJjMTlmNTZhYTlmNTA2Mzdk
N2U4NjBhMTExZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTIsNiArNTIsMTAgQEAgbmFtZXNwYWNlIElQ
QyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNz
UG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNz
IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Nyw3ICs5MSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxv
YWRJbmZvOwogc3RydWN0IFdlYnNpdGVEYXRhOwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4g
eworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
dXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAg
LTEwMiwxMiArMTA2LDE2IEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdv
cmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1Byb2Nl
c3NQcm94eSk7IH0KICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgc3RhdGljIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IGFsbE5ldHdvcmtQcm9jZXNzZXMoKTsKKyAg
ICAKKyAgICB2b2lkIHRlcm1pbmF0ZSgpIGZpbmFsOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93
bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRj
aE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxMyArMjE0LDExIEBAIHB1YmxpYzoKICAg
ICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxl
cjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlm
CiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOworICAgIHZv
aWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgYm9vbCBoYXNTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQpOwogICAgIApAQCAtMjI5LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVy
U2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1
bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAK
KyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAg
IHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwg
UmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8
SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU2LDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKIHByaXZh
dGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjcwLDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiw4ICsz
MjUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsK
IAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxs
YmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0Zl
dGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsK
ICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVu
ZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKQEAgLTM1MCw2ICszNjEs
NyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nl
c3Npb25JRHM7CisgICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2Vy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4
IGI4ZGFlZGY3YmViYTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjgyYzEwZTQxZDU2MjVk
YmFhZGY5MTNiOTQ4MDQ0N2M3MGNjMTlkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01
MSw4ICs1MSwxMCBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6
aGFuZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFt
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFt
ZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNl
c0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cyhldmVudCk7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VY
UENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VO
YW1lKSB7CisgICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKaW5kZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYx
MC4uZDgxNjBiMDBiZTQ2NGI2NDEyZTg4Njc3MDY5YjY5OWE4YmM4NmVmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykK
KyAgICA6IG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewot
ICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFn
ZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJD
b250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVu
dDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQ
cm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclBy
b3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgs
ODQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVy
Kj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2Vy
dmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJT
ZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFu
YWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHko
KSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2Vi
UHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVj
dDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9z
dG5hbWVzKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5j
dGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2Rp
ZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVu
dFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxs
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBV
U0UoU09VUCkKLSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNj
ZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBk
NGU0N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQz
NzdiNTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFj
azxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5
Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFu
YWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRl
KFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAg
IHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXpl
Q2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAy
LDEwIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6
Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2ll
c0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVu
dAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBy
b2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZX
ZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
IG92ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2Vy
dmVyczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1f
Y29va2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsK
IAogI2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
aW5kZXggMWNkNjNhNTY5ZDcwNDg2OTQ5ZTg4MzQ5ZTIwMGZlNzFlNDg2NTg4Ni4uZDk2YjE1MGRk
OTA2NmUyMWEzNWY3MjdjOWNkMDRlYWFkNzgxNTRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9t
YXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9j
b250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRy
b2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250
cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJ
bnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVt
ZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
aXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBA
IC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUo
QVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBh
Z2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNl
cnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDog
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNz
aW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Np
b25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2Fu
VXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFt
ZUluZm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7
IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsg
VVJMKCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1
cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJl
cXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lk
ZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNm
ZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyBy
ZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9p
ZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3
NjMsNyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUo
RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRp
b24gJiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tB
dHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAg
ICAgICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUt
PnVybCgpKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJp
YnV0aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24p
LCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM3NCw3ICs1MzY0LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwg
Y29uc3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1l
SG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRV
UkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsg
c291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1Rp
bWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAs
IHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgp
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1l
TmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURv
bWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0
cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUo
KSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5G
cmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNl
bmRpZgogCkBAIC05OTk5LDU4ICs5OTg5LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1Q
cmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmli
dXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNh
blNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJp
YnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFs
dWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRN
ZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBkOTI2YjMzY2JkZjJiYjhi
Yjk4MGQ2M2M1ZGM1MmFlNTI1MDkyNTI5Li5hOTk0OWIwODk4NGYwNjA5MGVmOTA5MDhhNDBiN2I2
ZDZmYWM1YWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CkBAIC0xNDMsOCArMTQzLDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0g
V2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0Vf
TE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRo
aXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lG
X0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYo
c2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vz
c1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYgKzIzNCwxMSBAQCBzdGF0aWMgSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQ
b29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVy
biBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29u
ZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3Vw
OjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDYsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAg
LCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkp
CiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVu
dD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4
dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCht
YWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92
aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVu
aXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3
LDkgKzI3Myw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgogICAgIH0pOwogCi0gICAg
aWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygp
KQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2No
ZW1lKTsKIApAQCAtMjg1LDcgKzI4OCw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICBhZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUg
aW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9j
YXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQ0
LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xD
b3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFC
TEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkp
CiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3Bw
ZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAxLDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0
aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0
aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxF
KExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBt
YWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UK
LSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJk
IGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDEwLDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNl
QnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIp
OwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vz
c0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9u
KCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250
ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1
YWdlQ2hhbmdlZCgpOwpAQCAtNDM1LDggKzQxOSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxh
bmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1
YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ5LDcgKzQzMiw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVu
dChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpB
dXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2Fs
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nl
c3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3Ig
KGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJv
Y2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6
OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlm
CkBAIC00NzQsMjc1ICs0NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0
aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdl
YnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVz
aW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVt
b3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3Vy
IEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5S
dW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0g
ICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9y
ZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAg
fQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQ
cm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1Zl
Y3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRl
bnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxp
Y2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1l
dGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hl
TW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmlu
ZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0Nh
Y2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJD
YWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAg
ICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3Mo
KSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAg
ICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9y
IGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2
aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioq
KioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBl
bHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAg
ICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAg
ICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJp
bmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9y
YWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkpOwotICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAg
ICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAg
IAotICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJD
b3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAg
V2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJ
VFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkp
IHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5j
ZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNl
IGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQo
KSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJl
bmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAg
ICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAg
ICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
cGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0
b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAg
Y29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rv
cnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0
c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAg
ICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3Jp
Z2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0
IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAg
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAg
ICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAg
IGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0
ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0
aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNl
bmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywK
LSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0g
ICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21h
aW5zLAotICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8g
QWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBu
ZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQ
cm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNz
LT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdl
YnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVu
ZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJv
Y2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVy
ZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Np
b25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0
b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdU
Rk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1By
b2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9j
ZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMu
dmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1By
b2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0NjgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNz
aW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3Vu
ZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUg
cHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAg
ICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0NzgsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vz
c1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVs
YXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBt
X25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1By
b3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94
eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSld
IChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
SVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlm
aWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJl
cGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29u
bmVjdGlvbkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIp
CiB7CkBAIC04MDEsMjMgKzUwMSwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9j
ZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2Vu
ZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJh
YmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAm
cHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNl
c3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAg
IGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdl
dCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAg
ICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkg
Y2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIg
cHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAg
IEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBw
cm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9j
ZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nl
c3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNz
LT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTgyNSwzNSArNTI4LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRl
bnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4g
ZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmll
cigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURf
U1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAg
ICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNl
cnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVE
YXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJh
YmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2Vy
dmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJ
RD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJv
Y2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nl
c3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShu
ZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAg
IEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5l
c3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/
IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAt
PnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdv
cmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNo
U2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVu
Y2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBw
cm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NF
UlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNSw3
IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2Fy
bWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hp
bmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9v
bCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGlu
IGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9z
YW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3Jl
LmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMyLDggKzczNSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0
aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJv
b2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVy
cy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRo
OwpAQCAtMTE5OCw5ICs4OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmlu
aXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVj
dGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rp
b24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEy
OTUsMTAgKzk5Myw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVX
ZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29u
ZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBh
dm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUu
CiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBw
YWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3Jl
YXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1f
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0
YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDI0LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlcykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnBy
ZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2Vz
cyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCpt
X3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENv
bnRyb2xsZXIpCkBAIC0xMzU2LDcgKzEwNTEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlm
IChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47
CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2Vu
dChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDYw
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vz
c2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBh
Z2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29v
a2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdl
RW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEwODcsNiBAQCBib29sIFdl
YlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdl
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25h
bDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYg
KzEwOTYsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAg
IGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVk
UmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29r
aWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3Qu
Ci0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJM
LgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0
aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRl
KCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JD
b29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkws
IHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2Vu
dEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICgh
dXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdl
bnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2Vi
UGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25J
RCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5k
LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
KyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVx
dWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwg
b2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3Ag
bGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAg
IFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5w
YWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdl
VVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9y
VVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJB
Z2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsK
KyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxl
bmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsx
MTIwLDEyIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9j
ZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQ
YWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93
bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwg
eyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklE
KCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1
bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVE
YXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwot
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxv
YWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVz
dW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAw
KTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNywxMSArMTE5NCw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0
dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsxMjMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNT
ZWN1cmUodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjU0LDE4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0g
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSks
IDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hl
bWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNj
ZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29s
YXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODYsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90
b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVt
ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBA
IC0xNjE4LDEwICsxMjk2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0
dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCku
cmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMxLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9k
ZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9k
ZWwoY2FjaGVNb2RlbCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5n
KGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdl
YnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2Fj
aGVNb2RlbCksIHsgfSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBA
IC0xNjc0LDEyICsxMzUyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSog
b3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAg
cmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNr
Z3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUlu
Zm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3Nh
Z2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMyw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vu
ZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lv
bklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3Nl
cygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBt
X3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0MzAsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1p
bmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVw
YXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7
Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAg
ICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3Jr
ZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgp
KQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZp
Y2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29r
aWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEzLDIx
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMg
Y3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2Vi
UHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+
PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOworICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBv
biBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHBy
b2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7Cisg
ICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3
MzcsNyBAQCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6
OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2Vzcykg
eworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJ
RF0oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29y
a2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTks
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRl
TmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2Vi
UGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFn
ZUlEKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNm
ZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zl
ciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAg
LTIzODcsMjcgKzIwMDksMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1l
ZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQog
ewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjph
bnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdv
cmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBX
VEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vzcykgewor
ICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYg
cHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZDFmMWZlOTYxNTA2YTFlNWYxMzI1ZmE5OWE1NjA4
Yjk1MGI2YWI3MS4uZWJiY2FhNGVjYjFkNzM3MTdiMWEzNTQ4MmE3MmZhOWNmNGRlMWU0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBA
IE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xh
c3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
IGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5q
ZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9y
eUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpE
b3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAg
LTE5MSwxNyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQ
cm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChz
ZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlv
biBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nl
c3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0Fs
bFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpT
ZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBO
ZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQm
JiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hp
bmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hM
YXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlBy
b2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDks
OSArMTk5LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0
aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSop
OwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmlt
YXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vi
c2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNy
ZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
IAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBT
dHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5n
PiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAg
UHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3
YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5X
ZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQ
YWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzA3
LDggKzI5Miw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNv
bnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBz
dHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAg
ICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNCw4ICszMDcsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Np
b25JRCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3Vs
ZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9z
aG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAg
ICAgYm9vbCBzaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmc7IH0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KQEAgLTM4OCwxOSArMzY5LDEzIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3
aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkq
IG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsg
fQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
IAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYs
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRl
bGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQ
cm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2
b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29y
a2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAgIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXND
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6
ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3Jr
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VX
b3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgY29uc3Q7CkBAIC00NTksOCArNDM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3
YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNob3VsZFRha2VVSUJhY2tncm91bmRB
c3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91
bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3Rl
ZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpFdmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsK
ICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkBAIC00OTgs
NyArNDcxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZv
clRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAg
dm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNy
b3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlm
aWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAg
ICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3Rp
ZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwpAQCAtNTI1LDggKzQ5Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRv
U3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJ
bkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9
CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
KTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyBy
ZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUo
Q0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0
cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01NDMsNiArNTE1LDE3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKICNlbmRpZgogCisgICAgc3RhdGljIHZv
aWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5n
Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3Rvcnko
KTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAK
QEAgLTU1Niw4ICs1MzksNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRl
TmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdh
cm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRp
YWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBX
ZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJE
YXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEm
IG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApA
QCAtNTgxLDE0ICs1NjIsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nl
c3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURp
cmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgp
OwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMo
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5
ICs2MDMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8
V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBX
ZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1f
c2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9y
V29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJp
bmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2Vz
U3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2
aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYyMCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1
ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9u
U2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDggKzY1MSw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3Vi
bGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYg
SGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFz
aDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRT
dXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2ODMsNiBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsK
LQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2Rp
Y3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0UoU09VUCkKQEAgLTgyMCw3ICs3ODcsNyBAQCBw
cml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERpc2Fi
bGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQog
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb247CkBAIC04MzEsMjAgKzc5OCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNz
YWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZm
NzVkYWVjMzQ5YThmNzJhYjNiODUuLjJlNTRhODExNWM0ODg3ZjBhMWRkODNlZGY1YmRjYmUzYTQw
OGEyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApA
QCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRo
aXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsK
IH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbQppbmRleCBlZWU3OGZiYzk4ODY0OTQ3NmQxMDk1YjQ5Y2YxMDZjMTg0NDVkMjQ1Li44
YjY4OTYzNDhjNmYyZmRmY2ZkZGUxNDg4OTYwMTVmMzYzMmQ2NDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkNvb2tp
ZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgor
I2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGll
cy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eS5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3Rm
L1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2
Myw0ICs1NjUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5k
RG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQor
eworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVj
dGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDA4MzBjYTc1YTdmYzM4ZTY0NWI3NzViMzliMzM3NWQ0
YzIwNTAzN2QuLjFhODZiZWYyMmNhYzljNjQzNzM0MDdjN2EzYWYyMTVhMTg3YjI1NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1
ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzYsMTAgQEAK
ICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDI5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxv
d3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFT
dG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0
ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRh
U3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisK
Ky8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgY29ycmVjdCB3ZWJzaXRlIGRhdGEgc3Rv
cmVzLgorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0
b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVu
Y2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1l
dGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0
ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRh
U3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6
Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAg
LTExNSwxMCArMTM2LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVm
PFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAg
ICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVS
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vi
c2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4LDE3ICsxNTAsMTIgQEAg
V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0
cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQo
bV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJl
bW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkg
PT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1By
b3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vz
c1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAg
Z3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQog
CkBAIC0xNjksMTcgKzE4NiwzMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0g
ICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nl
c3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkp
OworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJu
IGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94
eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKKyAg
ICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSAmZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0g
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25l
dHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25J
RCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigq
dGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdp
c3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMjcsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlBy
b2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJl
dHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDIsMTUgKzQ2OCwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nl
c3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBvb2xzID0gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1
cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAvLyBGSVhNRTogSXQg
bWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSB0aGUgcG9vbHMgaGVyZS4KICAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Okxh
dW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
dGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAg
LTQ1OCw3ICs0ODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRl
RGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC03MjYsMTUgKzc1MSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgp
KTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBl
OjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
PT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJv
Y2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3QgYmUgY29ycmVjdCB0
byBpdGVyYXRlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC03NDIsNyArNzY2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgV2FsbFRpbWUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0Nh
bGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQpAQCAtODkzLDE0ICs5MTcsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAg
IGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGlu
Z0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQs
MTIgKzEwMTMsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAg
ICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Cisg
ICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTEwMjEsNyAr
MTAzOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywg
SFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdl
YnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29r
aWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQpAQCAtMTE4MCwxOCArMTE5NywxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGlu
ZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgp
LCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29u
ZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMTIsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlD
b3VudCwgQ29tcGxldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nl
c3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBw
cnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjExLDggKzEyMjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
dW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0
Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdl
dENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEsOCArMTIzMCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vj
b25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjMxLDIwICsxMjM5LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wg
aXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTI1Nyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5p
c1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI3
MywxMiArMTI2OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkyLDgg
KzEyODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI5Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTMyMiwxMiArMTMwOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM1Myw4ICsxMzMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTM2OCwyMiArMTM0NiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzOTcsMjMgKzEzNjcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
TCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM4OCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9t
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDQy
LDEyICsxNDAwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0
b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NTksMTIgKzE0MTIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRG
cm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NDc2LDI1ICsxNDI0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVkaXJl
Y3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNTA2LDYwICsxNDQzLDQxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnko
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3Vs
ZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRo
ZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNz
aW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBzdHJ1
Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsK
LSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVjdCBMb2NhbENhbGxiYWNrQWdncmVnYXRvciA6IFJl
ZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAgTG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgICAgICAgICA6IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNhbGxiYWNrQWdncmVnYXRvcigpCisgICAgICAgIH5M
b2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1NzQsMzggKzE0OTIsMzEgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm8KICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+IG1fY29tcGxldGlv
bkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAgIFJlZlB0cjxDYWxsYmFj
a0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0Fn
Z3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMp
LmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAgIH0p
OworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcg
TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAg
ICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNrQWdn
cmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAgfQorICAgIH0pOworICAg
IAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwg
eyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTI1LDEzIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENv
bXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Npbmco
bV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NE
YXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmws
IFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTY0MywyMiArMTU0MywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYQog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RT
ZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNv
bmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50
IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNz
aW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29u
ZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBi
b29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjcwLDEwICsxNTYy
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZh
bGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rp
b24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxl
bnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
Ym9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFs
ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
Njg1LDE4ICsxNTc0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNzA0LDggKzE1ODksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAg
IHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MTYsNyArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5n
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBs
ZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MjIsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25j
ZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjQ2LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFi
YXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNzkyLDEwICsxNjYwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwg
Ym9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBD
bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRV
c2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRh
YmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
bkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMzLDYyICsxNjky
LDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVj
b3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlD
b29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNv
bGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5MTksMTAgKzE3NTQs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRo
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NjIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wg
ZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk0MSwyMCArMTc3MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6
OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rv
U2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzg5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5n
KCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNu
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTc5LDE4ICsxODAxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3Jh
Z2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9j
YWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE5OTgsOCArMTgxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwpAQCAtMjAwOSwyNiArMTgyNSwxMiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vj
b25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNl
bmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJv
Y2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAg
ICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAg
IEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5
ICsxODQ1LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xz
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2Fj
eSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0
ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
CiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAg
IGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjA4NCw4ICsxODgzLDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlTWVkaWFLZXlGaWxl
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmlj
YXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRp
ZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdpbnMo
Y29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsxOTM4
LDMwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmlu
ZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWlu
YXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygp
Cit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRS
ZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKQEAgLTIxNjksMTcgKzE5OTEsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAg
ICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOwor
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOwor
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0K
IAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBA
IC0yMTkxLDggKzIwMTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1f
c3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjIxMSw4
ICsyMDMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVT
RURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjA0NSwxNSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5k
aWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwNzUsMTkgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlBy
b2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQot
ewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdD
b29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUp
OwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQot
ICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAg
ICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBm
b3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAg
IGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklE
KCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9u
KQpAQCAtMjMyOSw4ICsyMTEzLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vz
c2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVz
KCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsK
ICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAt
MjQzNSw3ICsyMjE3LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRh
U3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFy
YW1ldGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Np
b24oKTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0
aCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBA
IC0yNDY1LDEwICsyMjU0LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3Rv
cmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChW
ZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2
LDIzICsyMjYxLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdl
dExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEo
bV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyOTUsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpo
dHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNv
bnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9S
TShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSAr
MjMxMiwxOSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9E
T01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5k
U2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFy
QXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQ
SWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0yNTgwLDcgKzIzNDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRB
cHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAg
cHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwg
KmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jl
cygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICph
cHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzU0LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM2MiwxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0
cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50
aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51
cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlm
aWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVy
KFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBlMWI0
MGVkMjVkODY1ZTRjMmJjNDcyNDIzY2FjNmJmNDViYWFjN2RkLi4zOTQzYjVhODZlNjMwMWQxZWZh
MTI5MGU5OTJiYjcwZTBlMTc4ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNL
ZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3
b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFz
cyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC0xMDksNyArMTEw
LDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3Jl
KCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0
YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JF
YWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7
CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGlj
IFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBj
b25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwxMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgdGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9p
ZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE3ICsyNDYsMTEgQEAgcHVibGljOgogCiAgICAgRGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9k
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShj
b25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29u
c3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAg
ICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2
b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKKyAgICBzdGF0aWMgVmVjdG9yPFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOwogCiAgICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIApAQCAtMjcy
LDggKzI3Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNv
bmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYm
KTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAg
Y29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJl
dHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiArMjg2LDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBV
UkwmJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAKKyAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBX
ZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3ICszNjQs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJp
bmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZv
aWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RP
TUFJTlMpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCArNDAyLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVu
ZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3By
b2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07
CkBAIC00MTksNiArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFT
dG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+
IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29y
a1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0
b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5
M2M1M2I4ZWU5MzQyLi41YmEzOTAwZDJkYWZmMDU2YWJkMGNkZjA1N2FlMzI4NTRlYmZlY2YxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNp
dGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0g
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wg
PSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZChib29sIGVuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1
MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdM
aWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5
R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3Jt
R2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAg
ICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMg
ZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vi
c2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRo
ZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRp
ZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAg
IGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAg
ICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291
cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uMDg5
MjhmY2QzMTZkODhmOWQ1MTUwMGVjNjg0YWQxYjY0YWY4YTNmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0
ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwg
c3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
c2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlw
ZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRo
LCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNw
cAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFjLi4wNzkzZWQ1
MTM5MTUyOGQ5YjRiOWZkYjBmNGFkM2M4OTYwZmRhNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywzMCArMzcs
MjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAg
ZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91
bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdu
b3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciBy
ZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBt
b3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNj
ZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0
ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMu
bGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJv
eHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9yZVRM
U0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdz
ID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlT
ZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA1NjMwNDNh
ZTkyYjI0MDE0MjExNzRkZGNkYTdmZWZhZWFkZGNkMmEuLjIxYzhhYjFiMTU5MGQ2YWIwYWI2YTJk
ZTU5YjA4MWY2MTYyMzRjNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wOS0xOSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nl
c3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAg
ICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0
Q29udGV4dCk6CisKIDIwMjAtMDktMTggIERpZWdvIFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBBUEkgdGVzdCAvd2Via2l0L1dlYktpdFdlYlZpZXcvdXNl
cm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjayBpcyBjcmFzaGluZwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXgg
OTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4
YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0Ny
YXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDgg
QEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAK
ICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNv
IHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVz
dCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsg
cHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG93bmxvYWQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYwMTU2
MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEyZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAtODg5
LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNp
Z25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRhID0g
ZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBE
b3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJv
Y2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdy
b3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107
CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAg
IHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2FiZGEw
MWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFjMTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRkYWY5
MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNl
clN0eWxlU2hlZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9p
bnRzV0FMQXV0b21hdGljYWxseSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRl
UmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRl
bGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMxYTdj
YzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zl
cnkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxl
dGVSZWNvdmVyeS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcg
KzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9y
eQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpp
bmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2MWQ5
ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFlZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNU
KEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25z
aXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VS
TCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVw
Z3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIu
bW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJiOGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAzZTBm
ZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBn
cmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0
U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1
cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0
b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nl
c3NLaWxsLm1tCmluZGV4IDY4NzQ1MjllYmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZkNWYu
LjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9j
ZXNzS2lsbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAt
OTIsNyArOTMsNyBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
ICAgICBpZiAoIWtpbGxlZERCUHJvY2VzcyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsK
ICAgICAgICAgICAgIGtpbGxlZERCUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
ICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpp
bmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4MjVi
YjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KQEAg
LTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3Jp
cHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQg
cnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5k
bGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGlu
aXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJz
aW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07
CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRp
cmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAg
IE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lv
bk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0
YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJM
LnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBh
dGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRo
YXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYx
LgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDog
ZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVk
REJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRl
c3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVkOTk2
MGVkZTk2MGMwMDFjMjcyYjY1MDM5MzkwMTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0ODJi
Y2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1wb3J0
IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
Qk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlBlcnNpc3RlbmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBlMzc0
NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFjNzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5k
ZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1pbmF0
ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBNYWtl
IGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2OCw3
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3MpCiAK
ICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4g
dGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcg
KzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFzQWNj
ZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUluV2Vi
Vmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1w
RmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYz
ZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRl
bXBGaWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJv
Y2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGgg
ZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdi
M2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJh
MGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAg
VEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBA
IC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNw
ZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFk
eVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlv
bkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dl
YlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQ
b29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBl
NjBmODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZj
NDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcg
QEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9j
ZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
c2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3Rv
cmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAq
c3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJv
b2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1Nh
bmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAg
ICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0Uo
aGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwor
ICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVm
ZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkz
NmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3ND
cmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9y
ZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFz
aChXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4
MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1
NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1
LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRp
bmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29w
KDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2Fi
YTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3
MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAg
LTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9j
ZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1Rv
cEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAq
aXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5
KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlX
aXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVs
dEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBh
dXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5T
VVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJM
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtk
ZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6
bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQ
YXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkK
ICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3
RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpu
ZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVD
VF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhd
KTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25m
aWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZh
bHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IFN0b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5h
dmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bv
b2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3Jl
MSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxh
ZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxh
Zyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAK
IEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVj
dCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVj
NTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZm
MGRiMmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1
OCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3Jr
ZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHRO
UyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNz
YWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4
ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURp
c2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFs
c2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9y
VGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAg
IHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgy
LDYgKzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jl
YXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAg
ICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgp
KTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAg
LTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9j
ZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
bG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIg
cHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1
LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpu
ZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2Fy
bWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VX
b3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRo
aXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNU
X0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VX
b3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQ
b29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3Rd
IGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpA
QCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVy
biB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3Vu
dElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZElu
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NT
ZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVY
UEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2Vydmlj
ZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxh
bmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykp
OwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRp
bmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJs
YW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewog
ICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9v
bCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNo
U2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZp
cnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0
QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7Cisg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJz
dExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2
aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBh
dGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBb
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0
NmFlY2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUy
YTU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJv
b2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hv
dWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
Zm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3Vs
ZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29r
aWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBz
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRF
U1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQog
ICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBA
aW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURl
bGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdh
aXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFt
ZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2Fn
ZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0
cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZv
ck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgp
OworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxz
Y3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQg
aSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tp
XS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9z
Y3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0
aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJW
aWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAq
c2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAg
ICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTog
QCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tp
ZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAg
fV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENv
b2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tp
ZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0
Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZp
ZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRN
TFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVn
YXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9
CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNl
c3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3Rv
cmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9y
ZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFBy
b2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICph
bGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUu
c3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBj
b29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNv
b2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8x
MjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7Cisg
ICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFz
ZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFt
ZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQ
Q29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2Iy
MmUuLmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExl
YWtzMykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5n
ZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4
YTViOWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYx
ODhiNTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5t
bQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93
LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1l
IGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1
cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElz
IHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
YXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5
cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0g
Y29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNv
cmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9y
ZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICBy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBl
czpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1v
ZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBA
IC01MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0
b3JlQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktp
dCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRy
dWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1v
dmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3Ip
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2Nl
ZGRiODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5
ZjJhYTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAog
ICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAg
ICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsK
LSAgICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURh
dGFTdG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAg
ICByZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0K
IAotV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZp
Z3VyYXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29u
dGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsK
LSAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0
V2Vic2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409300</attachid>
            <date>2020-09-21 12:36:33 -0700</date>
            <delta_ts>2020-09-21 14:59:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921123631.patch</filename>
            <type>text/plain</type>
            <size>322495</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmI3ZWQ4ODJiM2FlNWRlNWRhNzU4Mjc5OGQxYjY0MmMxYWRiYTI5NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2NS4uMzAwNmY0
ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNp
bmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uCiAKICAgICBj
b29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkq
IGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVE
YXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29r
aWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAg
ICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKAog
CiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNl
c3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkg
fSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhh
OTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1By
b3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxl
ciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCmlu
ZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjRjODQ1YTBlYzcy
NTY1OWNmZTc5Y2VhMzVkM2NiYTk2NjgzNDYxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2Fk
aW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Q
cm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFw
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFkNWYyOTczNTE3NmUzMWVhNzBmNWVk
NTU2Yy4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMxOWRmODkyMTFmYzc1NTU2YzY2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5l
ZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0
YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtl
bmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRG
b3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwog
Ci0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQo
KSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJ
U1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRz
ID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAg
ICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBm
YWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93
c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBM
QVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6
aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlz
TWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwg
W2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVs
dHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZh
dWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tl
eV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4
dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVy
cy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9y
S2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAt
NTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogICAgIE5TTnVtYmVyICpk
YXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJ
VFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYg
KGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlU
UERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAg
ICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VH
cm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1l
dGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZv
cktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJl
ZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVh
dGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dl
YnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlk
YXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2
YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRG
b3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50
KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRh
KCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFM
WVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApp
bmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYw
YmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBA
IHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9k
b3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52
YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJv
eHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERv
d25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAo
IW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAg
ICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVT
RUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAg
ICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSks
IDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1f
cHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0g
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29y
a2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwog
ICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsK
IH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAg
IG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBX
VEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsK
ICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAg
ICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJv
dGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
YXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVk
VGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9h
ZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBA
IHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
KyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVT
dWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3
cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlz
TnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3Rp
bmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFt
X2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51
ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9u
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0
ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRi
YmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94
eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAg
IDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nl
c3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RG
Ojpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBw
YXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7
Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAg
IG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxs
RW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5
TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdl
UHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5
JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFBy
b2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMi
X3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAg
ICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRp
b24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJv
dW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24g
PSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmll
cigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRl
ZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAi
VUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2Vz
cyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5
LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1h
cDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAg
UkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20g
VUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAK
LSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
bWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93
bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUo
KTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3
LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25z
dCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25s
b2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsK
LSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5k
b3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5k
b3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVh
cigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9h
ZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NT
dXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxl
YXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3
b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1
ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRl
KCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2Vz
czsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3du
bG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4u
ZDZjMzMyM2RkOTNlNjlmNTZhZGY2YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cApAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCBy
ZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsK
IH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmco
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29y
a1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMs
IGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vz
c1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsK
KyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0
b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEyMmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi4xOTIw
YjA1OWIzOGIzOTY2MmFmOTBhNjRkNTU3NjhkNjlhMWU3ZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00
OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Miw3IEBACiAjaW5jbHVkZSAi
V2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2lu
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0
Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzczLDExOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShD
T0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNl
bmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JB
U0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNz
UHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAg
ICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5l
dHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQ
cm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nl
c3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29y
a1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3
b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4g
cHJvY2VzczsKKyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhy
ZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVh
ZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFp
bigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAg
ICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJz
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVN
b2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Cisg
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9j
ZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShw
YXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBw
YXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYK
KyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3Jl
UGFyYW1ldGVycygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRl
cnMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVy
czsKKyAgICBmb3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1l
dGVyczsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3Jv
dW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdh
eXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29s
U2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBp
ZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdv
cmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkp
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4o
KSkKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Ro
cm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENy
ZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQo
KS5hZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1By
b3h5KCkKQEAgLTk4LDYgKzE5OSw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJv
Y2Vzc1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5y
ZW1vdmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0x
MDUsMTUgKzIwNywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwog
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAg
ICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dHJ1ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRG
T1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nl
c3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0g
bV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBA
IC0xNjYsMTIgKzI2NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94
eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBj
b25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQ
YWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1l
SW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAg
ICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9
IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93
bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bv
b2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJl
dHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBw
cm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3
LDggKzMzNiw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBu
ZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nl
c3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTcsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRp
c3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwogfQogCkBAIC0yNzQsOCArMzcwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewot
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwot
CiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFw
LT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKQEAgLTMzMSwxMSArNDI1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlz
U2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZp
c2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9
IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShh
dXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM5MiwxMSArNDgxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAg
ICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1
ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rp
b24oKSkKQEAgLTEyMDUsNyArMTI4OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9j
ZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykp
OworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0
NSArMTMzNywzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAg
ICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0
YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3Rv
cmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNz
aW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNp
dGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9u
SUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgp
KSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtG
b3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7
CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURh
dGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNl
c3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9y
ZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRl
RGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0
b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAo
d2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNz
aW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25E
ZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0
ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOCw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBz
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlz
LCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3
b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcxLDM0IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFn
ZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RU
byhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDAp
OwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNz
ZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5k
V2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNC
YWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91
bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRG
b3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAg
ICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRB
Y3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRv
Rm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlm
IChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBp
ZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0
eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nl
c3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFj
a2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgK
aW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMWFmZTIyNDM1
ODgxNmRlOTVjNDA1NzkxZTk0MTk2MTNiODZiYWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTUyLDYgKzUy
LDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAKK25h
bWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQorCiBu
YW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3LDggQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFBy
b3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5
OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpA
QCAtODYsOCArOTAsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOwogc3RydWN0
IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCi1jbGFz
cyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNs
aWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMg
UmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA3LDE3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsK
IAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3JrUHJvY2Vzcygp
OworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vz
c1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4g
YWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7
CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERv
d25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlBy
b2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA2
LDE1ICsyMTYsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigp
IGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNz
ZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBt
X3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZv
aWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKSBj
b25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOworICAgIHZvaWQg
YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uKFdl
YnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcmIGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM2LDggQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9p
ZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVu
dGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBP
cHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsyNTcsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlm
aWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7IH0K
KworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisK
KyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwog
ICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsy
NzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5l
Y3Rpb24mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAg
ICAgdm9pZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudApAQCAtMzEyLDE2ICszMjksMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vz
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9v
bDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJz
aXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxs
YmFja3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9h
ZFByb3h5TWFwOworCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
ICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKKwogICAgIFBy
b2Nlc3NUaHJvdHRsZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NU
aHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRG
aWxlczsKICAgICBQcm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXM7CkBAIC0zNDksNyArMzY3LDggQEAgcHJpdmF0ZToKICAgICB9OwogI2Vu
ZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vh
a0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFm
NmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJjMTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3Yzcw
Y2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wg
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNf
b2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2Vz
RGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2lu
dE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAo
bWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1
bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBj
YzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzVi
ZTdhMTI3OGVjMWRmYjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHku
aCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBs
ZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5
KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJv
Y2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29r
aWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29s
KSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHBy
b2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNl
cnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGll
bnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2Vi
Q29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQ
b29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAg
Zm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9i
c2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2
ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0K
LSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQ
cm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewot
ICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklE
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQs
IGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2wo
KS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNv
b2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
LSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1l
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklE
LCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNv
b2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQs
IGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2ll
cyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMo
c2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRD
b29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
UmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRP
YnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklE
KSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgp
PiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nl
c3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5k
aWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9u
SUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5
ZC4uNmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1
Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNr
OwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJh
Y2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAK
LWNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1l
bnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdl
clByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2ll
TWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJD
b29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBS
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0
d29ya1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5
KG5ldHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHko
KTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGll
bnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpP
YmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQ
cm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0g
ICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVk
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSop
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lk
ICgpPj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25J
RCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjVi
NGQ3YTc4MjI2MGQzODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsx
NzQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9v
bCBjb250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSAr
MzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlz
YWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgp
LCAwKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5k
aWYKQEAgLTQ0MjksNyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8o
Y29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlE
KCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJv
Y2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQo
KSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3
ICs0NzE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFt
ZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJh
YmxlRG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAg
ICAgICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmco
KSB9OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJM
KSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jv
c3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5h
dmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUlu
Zm9EYXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNr
QXR0cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVz
dGluYXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUz
NzcsNyArNTM2Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29u
c3QgV2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhv
c3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0g
c291cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJl
Z2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5p
c01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikp
OworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVE
b21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVk
aXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5p
dGlhdGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2Vi
Q29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLmE5OTQ5
YjA4OTg0ZjA2MDkwZWY5MDkwOGE0MGI3YjZkNmZhYzVhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgog
CiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMj
X19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhj
aGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoi
IGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVs
LCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiAr
MjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAor
VmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVm
YXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBA
IFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVl
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1h
a2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9y
ZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VH
cmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3
YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTog
VGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNl
aXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAg
ICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRT
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nl
c3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0
RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNz
ZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAy
LDE2ICs0MDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRp
b25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VS
KQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgot
fQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDEx
ICs0MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJv
Y2Vzc1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00
NDksNyArNDMyLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9k
ZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1v
cnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vz
cyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJl
YWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFk
aW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWlu
KCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAg
fQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRl
RGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0g
bWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29v
a2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24o
KS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291
cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
b25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAg
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBl
bmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBh
cmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1
bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRl
cnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1
cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9B
Y2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0
aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRo
b3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2Js
ZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3Jl
YXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgp
OwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkg
PSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGly
ZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9y
ZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3Ry
aW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
YWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
VEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFy
YW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0g
ICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAg
Ym9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6
OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFs
bEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNp
dGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0g
ICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNl
bmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNl
bmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAg
ICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdN
b2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFw
cEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3Rvcnko
KTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9y
eTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2Fj
aGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFn
ZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJl
Y3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJh
Y2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykg
ewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAg
ICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0g
ICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJs
ZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlu
cyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAg
ICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
YXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
SFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBo
c3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JL
X0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5h
YmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0g
ICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0
aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAz
RW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNl
dCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwK
LSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFt
ZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsK
LQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJv
Y2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNl
bmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQot
ICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8v
IE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lv
bnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3Ig
KGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGlu
Z05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0
dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24p
CiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVh
dmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0
aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCkBAIC03NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5
KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1Zh
bGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdl
YWtUaGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1Io
UHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVt
cHQsIHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3
ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jh
c2hlZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYg
d2ViUHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJl
Z2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgp
KTsKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRh
U3RvcmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRh
U3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigp
OwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwot
ICAgIH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0
byBob3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29s
ID0gcHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdl
YlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAg
ICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3Mg
PT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkK
KworICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAg
ICAgICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBw
cm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRl
RGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0g
ICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vy
cyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7Cisg
ICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vy
cyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VX
b3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0
aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdl
YlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVn
aXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJv
Y2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJv
Y2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRy
KCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2
aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElE
PSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0g
ICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURh
dGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQ
cm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3
UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1f
cHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAg
IEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1f
c2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFs
dWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQu
aXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VX
b3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9v
bC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAt
PnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2Vu
dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29u
dGFpbnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJv
Y2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9j
ZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0K
ICNlbmRpZgogCkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2Vi
UHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNp
bmcgQnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNo
ZWQgdXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAg
ICAvLyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJz
aXRlRGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFT
dG9yZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisg
ICAgaWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlm
CiAKQEAgLTEwMzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAg
cHJvY2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGlu
aXRpYWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBh
cmFtZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2
ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9y
VGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24o
dGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nl
c3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94
eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwg
UmVmPEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkp
IHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEg
c3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFu
IGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEg
c3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
KTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAog
ICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBA
QCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xp
ZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAg
ICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAg
ICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1
c2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQg
PSB1c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vy
dmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNz
IDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
cy5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9
CiAjZW5kaWYKQEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdl
QmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQog
ewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUu
c2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsK
LSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUu
cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lv
bklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAg
IGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAg
LTE0MDEsNyArMTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJz
aXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkm
IFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdl
YlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9h
ZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRp
bmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5z
ZXNzaW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBp
c0FwcEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0
aWF0aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdl
UHJveAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBS
ZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVS
TCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0
byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkg
ewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5p
dGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFp
bnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAg
aWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVz
ZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2Vu
dChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JD
b29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUo
ZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwg
dXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAg
ICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVx
dWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAv
LyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsg
VVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVS
TCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVE
b21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAg
aWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVz
ZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGlu
aXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgp
KTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChX
ZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVx
dWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3Jl
LnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxv
YWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJv
Y2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVBy
b3gKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0
IEFQSTo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8m
IGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VS
ZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYg
KG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQ
cm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5Owot
ICAgIH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25s
b2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQogCkBAIC0xNTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBs
dWdpbnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nl
c3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICBy
ZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlm
aWVyKCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nl
c3NJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3
YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAs
MTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c1NlY3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hl
bWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJs
U2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUo
W3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRh
U3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1
NzgsMTQgKzEyNTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVB
c0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
KTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2No
ZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTYwNiwxMCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
LmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZv
ciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQ
cm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhj
b25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hl
bWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQ
YXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9k
ZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENh
Y2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNo
ZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBX
ZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxT
eW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwo
ZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91
dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRh
dGFTdG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVy
biBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIp
CkBAIC0xNzUwLDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNh
bXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3Rv
cE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSks
IDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRl
U2VydmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlBy
b2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQzMCwx
NSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2Vz
KCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5l
bnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nl
c3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5i
ZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVB
dXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKQEAgLTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0
V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNl
bmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6
c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdl
YWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vz
c2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygp
CiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBw
cm9jZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxs
T25NYWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAg
ICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
IGNhbGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2Vy
UHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAg
fSk7CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omlz
U2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QK
IHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5l
ZmZpY2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsK
ICNlbmRpZgpAQCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
Q3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9E
b21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94
eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9t
YWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlm
IChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJ
QyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwor
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFz
U2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAg
IHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJv
Y2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwg
W10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdl
YlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAg
fSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYx
ZmU5NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi5lYmJjYWE0ZWNiMWQ3MzcxN2Ix
YTM1NDgyYTcyZmE5Y2Y0ZGUxZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZl
cjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBI
VFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsx
NzksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25s
b2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4m
Jik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZv
aWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAg
Ly8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVt
bXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBt
X2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdl
YlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHBy
b2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpD
b25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUg
bWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBm
b3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBt
ZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQog
ICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAog
ICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9j
ZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlz
Y29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVj
dFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQot
CiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNp
dGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpA
QCAtMjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4o
U3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYm
IG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJT
dXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAg
dm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBu
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAog
ICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBh
Z2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9o
aXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5z
aWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0
LDggKzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1
c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdl
YlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpA
QCAtMzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFBy
b2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7
Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVy
biBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1Nl
cnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5
Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1f
YWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAg
Ym9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNp
emVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VX
b3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlv
bmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xs
ZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250
ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJv
b2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2
ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChj
b25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9t
YWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6
RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5
RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFp
biwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0
ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVi
bGljOgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZv
aWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQg
bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU0Myw2
ICs1MTUsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2Up
OwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAtNTU2LDggKzUzOSw2IEBAIHByaXZhdGU6CiAg
ICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUq
LCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdh
cm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBX
ZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7
Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhh
bmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01ODEsMTQgKzU2Miw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50
Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlE
aXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdp
c3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOwpAQCAtNjMwLDkgKzYwMyw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vz
c1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQg
YmFja2luZyBwcm9jZXNzLgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0
YXRpYyBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCk7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24g
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXIgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAg
ICAgT3B0aW9uYWw8V2ViUHJlZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5j
ZXM7CiAgICAgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2Vy
Q29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7CkBAIC02NDgsNyArNjIwLDYgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1
dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93
bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owog
CiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwog
CkBAIC02ODAsOCArNjUxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVu
YWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0
MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRl
RGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2Vi
Q29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBs
ZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApA
QCAtNzE0LDggKzY4Myw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0
aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vz
c1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShT
T1VQKQpAQCAtODIwLDcgKzc4Nyw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9pc0Rl
bGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgYm9v
bCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0YXRp
YyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKQEAgLTgzMSwyMCArNzk4LDYg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2Fn
ZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBt
ZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
aW5kZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uMmU1NGE4MTE1
YzQ4ODdmMGExZGQ4M2VkZjViZGNiZTNhNDA4YTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVk
Zjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmEyMDcyNTQ4OGJiOTM5ZTM3YTZhNGRiZDc0ZjVlNzU1
MzM4NzBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIkRl
ZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5o
IgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCkBAIC00NCw2ICs0NSw3
IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNz
UHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50
aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIH0KICNlbmRpZgogCitib29sIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNv
bnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1l
bnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRs
ZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNh
NzVhN2ZjMzhlNjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uMGZmZTQ0MDdiMjk2NjM1MGMwYzA3
MGE3ZjJkM2Q4N2NiODdmN2RhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9y
YWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFs
aXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0Nh
Y2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0
YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04Mywx
MyArODgsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jk
c0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdp
bnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4g
bWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZv
ciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBm
dW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVE
YXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0
ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vz
c2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI2LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNp
dGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3Vy
CiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMo
KSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3Rlcldp
dGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0
aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4
LDE3ICsxNDAsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAg
ICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERh
dGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0
RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdl
dChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nl
c3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkg
PSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1
UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byog
Z3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkK
KyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNl
bmRpZgogfQogCkBAIC0xNjksMTcgKzE3NiwzMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3Rv
cmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Np
b25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCgpCit7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklE
LCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwor
fQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFs
bERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYg
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQogewotICAgIGlmIChtX3Nlc3Npb25J
RCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8g
cmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwot
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRl
ZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdv
cmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CiAgICAgfQorCisgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
Z2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVE
YXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1
LDEyICsyMTcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7
CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xz
KDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4o
KS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVz
SWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00
NDIsMTUgKzQ1OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgIGF1dG8gbmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRv
IHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAv
LyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSB0aGUgcG9vbHMgaGVy
ZS4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZToKQEAgLTQ1OCw3ICs0NzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNo
RGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdD
YWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZl
dGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQ
b29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC03MjYsMTUgKzc0MSwxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBXYWxsVGltZQogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29t
cHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlz
UGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQ
b29scygpIDogcHJvY2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3Qg
YmUgY29ycmVjdCB0byBpdGVyYXRlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC03NDIsNyArNzU2LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
LCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtODkzLDE0ICs5MDcsOSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBX
YWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
KSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVE
YXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZp
ZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7CkBAIC05OTQsMTIgKzEwMDMsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToK
QEAgLTEwMjEsNyArMTAyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tp
ZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBv
cmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVE
b21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQpAQCAtMTE4MCwxOCArMTE4NywxMiBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBjb25zdCBWZQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1l
b3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtl
ckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMDIsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNz
RW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93
blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjExLDggKzEyMTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29t
cGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQs
IHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklE
LCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEs
OCArMTIyMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRm
YXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5n
VGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsxMjI5LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vj
b25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1Niwx
MiArMTI0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTI3MywxMiArMTI1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjkyLDggKzEyNzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI4Nyw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTMyMiwxMiArMTI5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzEzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1Myw4ICsxMzIyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChib29sIHYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29u
c3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTM2OCwyMiArMTMzNiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
bwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzOTcsMjMgKzEzNTcsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJM
JiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBz
dWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywx
MCArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJl
ZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNDQyLDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
Y29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NTksMTIgKzE0
MDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDc2LDI1ICsxNDE0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVS
TCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTA2LDYwICsxNDMzLDQxIEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJt
aXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0
aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxDYWxsYmFja0Fn
Z3JlZ2F0b3I+IHsKLSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVjdCBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvciA6IFJlZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAg
TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiAgICAgICAgICAgICA6IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNhbGxiYWNrQWdncmVnYXRvcigp
CisgICAgICAgIH5Mb2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1NzQsMzggKzE0ODIsMzEgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+
IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAgIFJl
ZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5l
dyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHko
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAg
ICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBh
ZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6Q2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtsb2Nh
bENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFja0Fn
Z3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAgfQor
ICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCht
X3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZh
dGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lv
bklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTE1LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
c1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNB
bGxUYWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3Rh
dGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29u
c3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY0MywyMiArMTUzMywxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0lu
RGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21h
aW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5JREV4aXN0c0luRGF0
YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRz
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlz
UHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1v
dmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NjcwLDEwICsxNTUyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0Zv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQs
IGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0
YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRV
c2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJl
ZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2Vy
dEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBi
b29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNjg1LDE4ICsxNTY0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzA0LDggKzE1NzksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUs
IENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVu
bmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3MTYsNyArMTU5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdl
SUQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTU5OCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNl
Y29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MTIs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJ
bkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEz
ICsxNjM2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRh
dGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzkyLDEwICsxNjUwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NjQsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFu
ZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRm
YXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjczLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRv
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
ODMzLDYyICsxNjgyLDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVM
b2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRl
bGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNs
dWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFz
TG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRl
ZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0
aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rpbmco
ZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5
MTksMTAgKzE3NDQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2Vi
UHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tp
bmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2Nr
aW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NTIsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk0MSwyMCArMTc2MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQg
PyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2ll
cyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzc5
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmly
c3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCku
dG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9z
dCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhj
b25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTc5LDE4ICsxNzkxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBj
bmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3lu
Y0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5
bmNMb2NhbFN0b3JhZ2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5OTgsOCArMTgwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRz
LCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRz
KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMjAwOSwyNiArMTgxNSwxMiBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KFNlY29uZHMgc2Vjb25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRl
ZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBp
ZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9z
ZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBj
b25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xz
OwpAQCAtMjA0Myw5ICsxODM1LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUg
b2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYg
KCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsK
ICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjA4NCw4ICsxODczLDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRl
TWVkaWFLZXlGaWxlKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUt
PmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVG
b3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRp
YUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAt
MjE0MCw2ICsxOTI4LDMwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlz
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5z
aW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKQEAgLTIxNjksMTcgKzE5ODEsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAg
ICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
dHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
dHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxz
ZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDAp
OworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9u
SUQpOwotICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxz
ZTsKICNlbHNlCkBAIC0yMTkxLDggKzIwMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQog
ICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwpAQCAtMjIxMSw4ICsyMDIwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5h
YmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVk
KTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjAz
NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vw
aGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQp
OwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDgg
KzIwNjUsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRp
c3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tp
ZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1
dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlF
cXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShj
b29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29r
aWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lv
bklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93
cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKQpAQCAtMjMyOSw4ICsyMTAzLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBl
bmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNF
bXB0eSgpKQpAQCAtMjQzNSw3ICsyMjA3LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQg
PSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9z
c1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lv
bklEKCksIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0
ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjQ0LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdl
YnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7
CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQot
ewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRh
aWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgp
KSB7CkBAIC0yNDc2LDIzICsyMjUxLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAg
IH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBv
b2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxl
cik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lv
bklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0
byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxz
KSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyODUsMTIgQEAgYm9vbCBXZWJzaXRl
RGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRp
ZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
IC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpA
QCAtMjUzMCwzNSArMjMwMiwxOSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5l
d05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRh
VHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUs
IGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxF
KEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
Y29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Np
b24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5k
RG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzMzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3Rv
cmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDog
bm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDog
YWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFp
bnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzQ0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWlu
c0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM1MiwxNCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVy
KGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5k
bGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aAppbmRleCAwZGM5MWYyM2M0MTU0Mzk1YzhlYmY4OTBmMzViZDAxODBjZDUxYWFkLi5iNTU4YTFk
OGUxN2NmNTE2YmY4NWY1MTkzZTE0MGM5YjA1OWZmYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2
ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7
CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7
CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBA
IC0xMDksNyArMTEwLDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJz
aXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdO
b25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRh
U3RvcmUmKT4mJik7CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3MoKSBjb25zdDsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOwor
CisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lv
bklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyBy
ZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQg
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5n
KCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNDYsOCBAQCBwdWJsaWM6CiAK
ICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7
IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9j
ZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJv
b2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAg
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNzIsOCArMjc2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1f
Y29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI4Myw2ICsyODUsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3Qg
U3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25B
bmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFu
ZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2Myw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAK
LSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdp
c3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykK
ICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+
IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1
ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29v
a2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2Vz
OwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQx
OSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29r
aWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29v
cmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhl
ZTkzNDIuLjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1NGViZmVjZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFT
dG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTVi
Mjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNw
cApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVu
Y2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAo
IWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBo
YXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0
YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nl
c3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50
IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0
b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAg
ICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApp
bmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3
YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogewotICAgIG1fY29va2llUGVyc2lzdGVudFN0
b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3Jh
Z2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Np
b25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgs
IHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYg
c3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNz
UG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJk
YWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRmYTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAg
LTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBh
cmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0
UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBG
SVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0
YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVy
cy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5Owot
ICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAg
cGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFy
YW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogeworICAg
IC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRM
U0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0
d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGlu
Z3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyht
X25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMy
ODQ2OWEwNjRiMWMxYWVkLi5mYzM5YzBlOTczYWEzNWQ4ZmFjMGYwNTEwMDBmZTY5MjlhOGU3NDJh
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjAgQEAKKzIwMjAtMDktMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlw
IGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2Fk
QXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNo
ZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06CisgICAg
ICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQ
ZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW06CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05l
dHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFT
dG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1t
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAg
ICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2Vd
KToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMp
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRq
dXN0Q29udGV4dCk6CisKIDIwMjAtMDktMjEgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5l
eUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgYWJvdXQ6Ymxhbmsgc3ViZnJhbWUgbG9hZHMg
Zm9yIG5vbiBhcHAtYm91bmQgdG9wIGZyYW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jh
c2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUy
MTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9u
Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQ
cm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdl
YlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhl
IHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQg
d2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24g
c3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAg
ICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
Z107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9y
V2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dl
YlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5
OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYwMTU2MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEy
ZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAtODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxv
YWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFw
cFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZy
ZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4K
LSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5U
b0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9y
ZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7
CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNo
ZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2FiZGEwMWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFj
MTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRkYWY5MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTg2LDcg
Kzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9pbnRzV0FMQXV0b21hdGljYWxseSkKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFu
ZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4
YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMxYTdjYzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4
ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQpAQCAtMzAsNiAr
MzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJh
c2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3
aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0
NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2MWQ5ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFl
ZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5
bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRl
VG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJz
cWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9y
ZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJi
OGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAzZTBmZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5
YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNU
KEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENv
cHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRl
bnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCmluZGV4IDY4NzQ1Mjll
YmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZkNWYuLjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3
Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tp
bGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtOTIsNyArOTMsNyBAQCBURVNUKEluZGV4
ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgICAgICBpZiAoIWtpbGxlZERCUHJvY2Vz
cyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsKICAgICAgICAgICAgIGtpbGxlZERCUHJv
Y2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3
MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2Zm
Mzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJl
dGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91
bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWRE
QkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpA
QCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVy
c2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25P
cmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2Vk
RGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xk
VmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJV
RShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVy
c2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlz
dCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3Jh
ZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9u
RXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5
VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpA
QCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0
ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVh
dGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNl
KTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
TXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVkOTk2MGVkZTk2MGMwMDFjMjcyYjY1MDM5Mzkw
MTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0ODJiY2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQ
cm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1wb3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcg
KzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5n
ZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCmluZGV4IGIz
MmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBlMzc0NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFj
NzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAt
NzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAg
d2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlz
aCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAg
IHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGly
ZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHBy
b2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5p
bDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlv
bi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUluV2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCks
IEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0KaW5kZXggOGVjNjVmMGEzYmE5MzczNmZkYjRmOWRkZmVmNzVjZTYwMDA1ZmQwZC4uNTEw
YjI0ZjU2OWQyMmJkNDBhN2FkYmUyNWVjZmQwZWNmYzhhYzcyNiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRs
eS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5
LDggQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5KQogCiAgICAg
cnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiQ29udGludWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBT
dXNwZW5zaW9uIik7CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2Vz
cyBBZnRlciBSZXN1bWUiKTsKQEAgLTE1OCw4ICsxNTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3Vz
cGVuZEltbWluZW50bHlGb3JUaGlyZFBhcnR5RGF0YWJhc2VzKQogICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJh
c2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVz
dEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNm
NTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVt
cEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9j
ZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBl
cnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2Iz
ZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVlZi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEw
ZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19T
VFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAg
LTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3Bl
bmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
KTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5
XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5
VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3
aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2Vi
VmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bv
b2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2
MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0
OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBA
QAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2lt
cG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nl
c3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJz
aW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9y
YWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpz
dG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9v
bCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2Fu
ZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAg
ICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRSho
YXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQ
cm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZl
cmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3Rl
bnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFkMjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2
ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUxMDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0Ny
YXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3Jl
Lm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNo
KFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3Vy
YXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgx
N2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRkYWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1
NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUs
NyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGlu
Z05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJh
MjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIzNTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNw
aW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcy
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAt
NzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nl
c3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDgg
QEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICpp
dHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3Rvcnko
KSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdp
dGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0
RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1
dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29u
ZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNV
UkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2Rl
ZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpu
aWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBh
dGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQog
ICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdG
aWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5l
d0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNU
X1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0p
OworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3Jl
bGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFs
c2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
U3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2
aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9v
bCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUx
IF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFn
ID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFn
KTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
XTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAog
QGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0
IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1
MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlmOGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYw
ZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4
LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtl
cjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5T
KFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3Nh
Z2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFu
ZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDgg
KzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlz
aykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxz
ZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JU
ZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAg
eyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIs
NiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVh
dGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAg
ICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkp
OworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAt
MTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nl
c3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBs
b2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBw
cm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUs
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclBy
b2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5l
d0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJt
ZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdv
cmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhp
cyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1Rf
RVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdv
cmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bv
b2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogICAgIFtbY29uZmlndXJhdGlv
biB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0g
Y29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBA
IC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXplX3QgbGF1bmNoU2VydmljZVdvcmtlclBy
b2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJu
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50
SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Q
cm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQ
RUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNl
V29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFu
ayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7
CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGlu
Z1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmly
c3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRC
bGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAg
ICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wg
Zmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNl
cnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nlc3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0
aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0
KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2
YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJh
NTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
SFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9v
bCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91
bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBm
b3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tp
ZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVT
VChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAg
ICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJv
Y2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBp
bnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVs
ZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2Fp
dEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7
CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1l
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewot
ICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdl
LlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRy
dWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7
Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNj
cmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBp
ID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ld
LnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3Nj
cmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRp
cGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZp
ZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpz
ZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAg
ICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBA
IlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2ll
VmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9
XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29v
a2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2ll
RG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRD
b29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxl
cnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4w
LjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwg
IlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmll
dzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1M
U3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdh
dGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30K
KwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vz
c2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9y
ZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3Jl
XTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJv
Y2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFs
ZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5z
cGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNv
b2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29v
a2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
OmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEy
Ny4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAg
ICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1l
PUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBD
b29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRs
ZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIy
ZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VS
TFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3Rm
L1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVh
a3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdl
dCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThh
NWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUuLmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4
OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1t
CkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3cs
IHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUg
Y3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVw
IE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMg
d29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBh
dXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
b2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlw
ZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29y
ZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9k
aWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAg
LTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3Rv
cmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0
LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1
ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2Vk
ZGI4MjE1NzQ3NWQ4MWYxMjIwZjQ1NmI4NjRjM2IxNzEuLjYzMzI2ZjY4NTZiYzYwNTlkYzYzNzlm
MmFhNWMwMDUwYTA3ODRhYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC0xMDYxLDggKzEwNjEsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0
YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAg
ICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAg
ICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSwgZmFsc2UpOwpAQCAtMzEzNiw3ICszMTM0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxp
bWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewot
ICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0
YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpCkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAg
IHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQog
Ci1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmln
dXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250
ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewot
ICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRX
ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409323</attachid>
            <date>2020-09-21 14:59:59 -0700</date>
            <delta_ts>2020-09-21 15:14:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921145958.patch</filename>
            <type>text/plain</type>
            <size>325115</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjEzNjcw
ZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRl
N2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2
NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1f
ZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpA
QCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5h
dGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5
OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQ
b29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBo
YW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9h
ZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxp
c2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0
NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9w
b3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1f
cmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93
bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1By
b3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVx
dWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93
bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmlu
ZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5k
aW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDAp
OworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThm
YTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQs
NyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25s
b2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vz
cyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hh
c0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMi
KSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmICht
X3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Mu
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQ
cm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUK
ICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0
aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNz
QXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVu
aXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJX
ZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29y
a2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktp
dCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5n
KTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0
b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdv
cmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQ
cm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7Cisg
ICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5
OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2Fk
RmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9H
KExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhl
IERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBw
cm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIo
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250
YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9k
b3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lk
IERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93
bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vz
c0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1f
cHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBt
X2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwg
IlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktp
dCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3Mi
KTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4u
NGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFz
aE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmlu
ZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkz
ZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3
ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0
YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3Rv
bVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJv
eHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXgg
YzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uMzE1NTRmM2ZkZTUzNjkw
YzE4YzkyZWFlNjkzNWViZWIzNzAwNmViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5k
aWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNDksNyBA
QAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiArNjIsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3MywxMTggQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4m
IG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vz
c1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkK
K3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAg
cHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNp
emUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNT
ZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3Mp
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7Cisg
ICAgaWYgKCFwcm9jZXNzLmdldCgpKQorICAgICAgICBwcm9jZXNzLmdldCgpID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuICpwcm9jZXNzLmdldCgpOworfQorCit2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAg
Ly8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0
aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAg
ICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
TG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3Mg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0
byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3Vz
dG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgp
KQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFj
b250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5w
YXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwor
ICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IGRhdGFTdG9yZVBhcmFtZXRlcnMo
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKCkKK3sKKyAg
ICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgZm9y
IChhdXRvJiBzdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKHN0b3JlLnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisK
K3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VV
SUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1By
b3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShh
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJM
RShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxz
ZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkK
KyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRk
KHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgp
CkBAIC05OCw2ICsxOTksNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2Fk
UHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3Zl
KHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1
ICsyMDcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFBy
b2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnBy
b2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAK
LSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxh
dW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7
CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZh
bHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQ
TEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJv
Y2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2
LDEyICsyNjUsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
K0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2ws
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlm
ICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtl
VW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCBy
ZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4g
bV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vz
c1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlv
blNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICsz
MzYsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
CiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29y
ayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHBy
b3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29s
Lm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSArMzU3LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRj
aE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRp
ZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
IH0KIApAQCAtMjc0LDggKzM3MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBh
dXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAg
IGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52
YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBA
IC0zMzEsMTEgKzQyNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZp
Y2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxl
V2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZN
b3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byog
cGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zOTIsMTEgKzQ4MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmlu
aXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAg
IG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwot
I2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5l
Y3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkp
CkBAIC0xMjA1LDcgKzEyODksOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJk
UGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEz
MzcsMzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFM
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFk
ZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9z
ZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZXMuYWRkKHN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5w
YXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklE
KCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0
YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0g
c3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAg
ICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nl
c3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5jb250YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3Rv
cmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9u
SUQpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwog
CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFT
dG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1By
b2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNp
dGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklE
KQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzE0MDgsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShX
ZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVn
aXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2Vy
Q29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBpZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU3MSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94
eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vz
c2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0K
IAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdy
b3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAg
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZp
dHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVn
cm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
cHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55
UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQ
cm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91
bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4
IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLjk3YWU1YTk5ZjVlNjUy
MGUxNmU0MmRjN2Y0OGI3MzljNzM0YmM1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBA
QCBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNw
YWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1h
cDsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNs
YXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7
CiAKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg2
LDggKzkwLDkgQEAgc3RydWN0IEZyYW1lSW5mb0RhdGE7CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVjdCBXZWJz
aXRlRGF0YTsKK3N0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotY2xhc3MgTmV0
d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHBy
aXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiwgcHVibGljIFJlZkNv
dW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNywxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAg
ICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAg
ICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTmV0d29ya1Byb2Nlc3NQcm94eSk7IH0KICAgICB+TmV0d29ya1Byb2Nlc3NQcm94
eSgpOwogCisgICAgc3RhdGljIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IGFsbE5l
dHdvcmtQcm9jZXNzZXMoKTsKKyAgICAKKyAgICB2b2lkIHRlcm1pbmF0ZSgpIGZpbmFsOworCiAg
ICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXll
ZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJh
bWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9h
ZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNz
UG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
c2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSAr
MjE2LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5h
bCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9j
ZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRp
ZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVE
YXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7
Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNl
c3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRl
RGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9p
ZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7
CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVz
ZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAog
ICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9u
YWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU3LDE2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAg
ICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0K
KwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAgICB2
b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0b3I8V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwogICAgIC8v
IEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzQsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYp
IG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24m
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9p
ZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVu
dApAQCAtMzEyLDE2ICszMjksMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQog
ICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0
YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2Fs
bGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0
ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9hZFByb3h5
TWFwOworCisgICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFByb2Nlc3NUaHJvdHRs
ZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NUaHJvdHRsZXI6OkJh
Y2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRGaWxlczsKICAgICBQ
cm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXM7CkBAIC0zNDksNyArMzY3LDggQEAgcHJpdmF0ZToKICAgICB9OwogI2VuZGlmCiAKLSAgICBI
YXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vi
c2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFu
YWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEw
ZjEzMzEwYzExZS4uODJjMTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZl
bnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUEND
b25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1l
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUg
PT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNE
YXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyhl
dmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZi
MWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzViZTdhMTI3OGVjMWRm
YjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5o
IgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
ICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzks
MjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkK
K1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vh
a1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJv
eHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQot
ewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMp
OwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQog
eworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAog
ICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBs
ZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVk
KCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBv
YnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAo
YXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBl
bmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
cnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQo
bV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkq
KQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBs
ZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5E
b2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVy
bCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQs
IGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Np
b25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNr
KQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tp
ZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNl
dEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
aW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uNmY1MWYwM2U1
YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2ll
TWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3Mp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9j
ZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBA
IC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVm
OwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCop
OworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAg
ICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29u
dGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAg
ICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdh
Y3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxP
YnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGll
bnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjViNGQ3YTc4MjI2MGQz
ODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsxNzQ2LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVk
KQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250
cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
ZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VX
b3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJMRShBUFBfQk9V
TkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKLSAgICB9
CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7CiAj
ZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
clNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1Qp
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
clNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQ0Mjks
NyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1
cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
PSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsK
LSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVj
b25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNl
ckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNv
bm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2Vy
QWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3Rv
cmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3ICs0NzE1LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIg
ZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIGN1
cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAgICAgVVJMIHJl
cXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9OwogICAgICAg
ICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkKLSAgICAgICAg
ICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdp
dGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFi
bGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFU
cmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRX
aXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJh
YmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRh
VHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9CiAjZW5kaWYK
ICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAg
IGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAgICAgIGlmIChh
dXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0cmlidXRpb24o
KSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGluYXRpb24oKS5t
YXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
KmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFk
Q2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlj
a0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzcsNyArNTM2Nyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQ
cm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgp
IHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJMLmhv
c3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVO
YXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9t
YWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3Ry
YWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgp
LCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZy
YW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdl
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1l
LmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2Vy
KSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVt
UHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24o
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5j
YW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0
cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVt
cEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3
b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRy
aWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9u
VVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9u
c0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5
MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjllZDAzY2NhN2IzODRiNmJl
YWNhMTJjOTI0ZGY4MmNkZTU5MjAxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhj
aGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18p
CisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZB
X0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQ
b29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYo
c2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQ
cm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5u
ZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0
YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmlu
Zz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
Cit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91
cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQ
b29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmln
dXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21h
dGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6
OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJ
OjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+
KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkp
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdl
U2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigq
dGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29s
KEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAg
ICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0K
ICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0
ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFs
aWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0
aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9i
amVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0g
ICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxl
bWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikK
QEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAg
ICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3Mo
KTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVw
YWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBy
b2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDEsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBX
VEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkK
LXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICgh
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+
KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdU
Rk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpCiB7
CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MTAsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nl
c3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFu
Z2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihj
b250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwog
I2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExh
bmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMyLDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9v
bCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1v
cnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6
OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlz
Q3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtQ
cm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRl
RGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmth
cm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAg
IC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xh
dGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAg
ICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
ICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3Jl
KSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndp
dGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3
b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1
ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMo
KSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0
aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1l
KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAg
IGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNo
ZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBT
dHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRs
ZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50
QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0g
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwot
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9y
KExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9j
YWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAg
IC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0
b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0
IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3
MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlu
a0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlm
ICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAg
ICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRl
RGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVj
dG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQot
ICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURp
cmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0g
ICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNh
Y2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91
bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxl
ZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
ID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tp
ZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5k
RG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VF
bmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNl
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0
ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0
YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAg
ICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0
byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1l
dGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1
ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAg
ICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0g
ICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxp
Y2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9t
YWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZh
bGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0g
ICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1
dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
SFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBo
c3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNl
bmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAg
ICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91
bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9k
ZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
OwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxv
bmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBC
b3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51
YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7
Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0
c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0b3Jh
Z2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwo
KSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFn
ZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZSho
c3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFU
SVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vydmlj
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9
IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9
IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAg
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAg
ICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAot
ICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAg
ICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8v
IEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJh
bWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVu
Y3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0g
ICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3
aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBo
YXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNl
c3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25l
dHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25l
dHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5
ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50
IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0Rp
ZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAg
IG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHBy
b2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50
IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03
NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vz
c1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxl
RG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VS
VF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAo
IW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAg
ICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRo
ZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vz
c1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQ
cm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1f
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3
YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlm
ICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0
byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYg
KHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5p
c0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3Jl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29u
dGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNz
UG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkp
OwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNl
cnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBw
cm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQ
cm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2ws
IFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAg
ICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2Vy
LCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0
aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nl
c3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlu
aXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7
Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwor
ICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1By
b3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCgh
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFp
bnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1f
ZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkp
Ci0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVu
Y2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJv
Y2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNz
UG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJv
Y2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7Cisg
ICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7Cisg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgog
CkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxl
d3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcg
dGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3
ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0
b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1f
c2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEw
MzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vzcy5p
c1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0
aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5p
bmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQog
ICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygp
OwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJv
Y2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToK
ICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAg
ICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMg
bG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQg
dG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRo
ZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRp
b24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAg
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBAQCBSZWY8V2Vi
UGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdl
Q2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1f
c2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZl
cmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNl
cnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBm
b3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3Nlcygp
KQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAg
aWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1
c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdl
bnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2
aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYK
QEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1
dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklE
KCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFk
ZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7
Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAo
c2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVy
cygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAg
ICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9y
ZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRl
bnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEsNyAr
MTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0
b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94
eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0g
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7
IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQo
KTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5k
ID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFn
ZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogI2Vu
ZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2
ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAg
ICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1Bh
Z2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChp
bml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
Ci0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0
aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVS
TCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwot
ICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAg
ICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9h
ZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJl
cXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVy
biBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1
ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2Vk
IGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQg
dGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGlu
Z1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwg
aW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1
YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
CisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQ
YWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBk
YXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQp
KQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJ
c1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25J
RCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91
bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERvd25s
b2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0
YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25sb2Fk
UHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0KCks
IGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRh
dGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0KLQor
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHku
ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBAIC0x
NTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQog
CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gbV9u
ZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAw
OwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlm
aWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9j
ZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAsMTggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hl
bWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1
cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAg
ICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVt
ZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEy
NTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNv
bnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBX
ZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
TG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsK
ICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVt
ZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNj
aGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYwNiwx
MCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxT
Y2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBu
ZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rl
ckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25l
ZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwo
Y2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
KGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAg
ICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNo
ZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5
KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hy
b25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRp
bWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFs
KQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZy
YW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFTdG9yZSku
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2lu
YXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMs
IHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xNzUw
LDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIoKQog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNh
bXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIFdl
YlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUm
JiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNz
LT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhz
dGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0IFBBTDo6
U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1By
b2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxX
ZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQzMCwxNSBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKICAgICAg
ICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1
bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNv
bXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5k
aXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdp
bigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9u
Q2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAg
LTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVu
dENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgogfQog
CitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdv
cmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQor
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9jZXNzIHBy
b3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25NYWluUnVu
TG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICBpZiAo
IXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNhbGxPbk1h
aW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7CiAjZW5k
aWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdv
cmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2llbnQu
Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbcGFnZUlE
XShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNlbmRpZgpA
QCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9w
dGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0aW9u
RGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQYWdl
SWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1NpdGVM
b2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0co
U2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0g
ICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCiAjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBX
VEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vzcykgewor
ICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYg
cHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyRm9yZWdy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlByb2Nlc3NQ
b29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShh
dXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1Nl
cnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYxZmU5NjE1MDZh
MWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi5lYmJjYWE0ZWNiMWQ3MzcxN2IxYTM1NDgyYTcy
ZmE5Y2Y0ZGUxZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
QEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFt
ZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2ll
U3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsxNzksNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50
KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRp
b25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAg
dm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3Vz
dG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAg
IGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkg
eyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBj
aGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNz
UHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJv
Y2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mg
b3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9k
ZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9u
KiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBU
JiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0
byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVu
dCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBV
JiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQg
cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlBy
b2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUu
Z2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0
aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNp
dGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVm
PFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3Rv
cmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMjYyLDEw
ICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYg
bWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBl
cywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQ
bHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAg
ICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3Rp
dmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBh
Z2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5n
ZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29u
dGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xp
ZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7
IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tW
aWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0LDggKzMwNyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAg
IHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hDb29raWVz
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQog
ICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpAQCAtMzg4LDE5
ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFu
YWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdl
YnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdv
cmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29y
a1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3Jr
ZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYs
IFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAg
c2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2
aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJD
b250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJv
bGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxk
VGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3Jv
dW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9p
ZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50TWFrZXNH
YW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdh
bWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJl
bnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJv
bURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRp
b25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lk
IHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0
aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBz
aG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVibGljOgogICAg
IAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigp
IHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7
IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJl
ZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU0Myw2ICs1MTUsMTcg
QEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlBy
b2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlm
CiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7
CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdl
YkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRl
bXBvcmFyeURpcmVjdG9yeSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKIApAQCAtNTU2LDggKzUzOSw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJv
Y2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8p
OwogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vi
c2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNz
UHJveHk6OklzUHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2
b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
TmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNo
cm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNl
ckRhdGEmJik+JiYpOwogCkBAIC01ODEsMTQgKzU2Miw2IEBAIHByaXZhdGU6CiAKICAgICBib29s
IHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51
c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJp
bmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5n
Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3Rvcnko
KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlm
aWNhdGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2Vy
dmVycygpOwpAQCAtNjMwLDkgKzYwMyw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7
IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBw
cm9jZXNzLgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFr
SGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAg
Ym9vbCBtX3dhaXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9
OwotICAgIGJvb2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBm
YWxzZSB9OwogICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9u
YWw8V2ViUHJlZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAg
T3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENv
bnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7CkBAIC02NDgsNyArNjIwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25D
bGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGll
bnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+
IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVm
UHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02ODAs
OCArNjUxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBm
YWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9Owog
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3Jl
OwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1
cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7
CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzE0LDgg
KzY4Myw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxl
ZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBt
X25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25h
cnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAt
ODIwLDcgKzc4Nyw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQ
cm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgYm9vbCBtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0YXRpYyBib29sIHNf
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4g
bV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKQEAgLTgzMSwyMCArNzk4LDYgQEAgcHJpdmF0
ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3Rk
Ojpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggZDY2
MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uMmU1NGE4MTE1YzQ4ODdmMGEx
ZGQ4M2VkZjViZGNiZTNhNDA4YTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwg
TWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywg
V1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0
ZDNiNTE1MzRiOTBiYjcuLmEyMDcyNTQ4OGJiOTM5ZTM3YTZhNGRiZDc0ZjVlNzU1MzM4NzBiNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIkRlZmF1bHRXZWJC
cm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0
ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5oIgogI2ltcG9y
dCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdl
Lmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRz
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVp
bml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29y
a1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRm
OCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhl
NjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uNDgwMzRmMWVmMThlZDdkZjc2NDMwZDg0NDAwNTAx
NTgxMzcyOTgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNz
U3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldl
YkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBA
IC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgi
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93
c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29s
IGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMTkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9y
aWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVl
OwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+
JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQog
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9u
PHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byog
ZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigq
ZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6
OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNp
dGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNp
c3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkp
KTsKQEAgLTExNSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3Jl
KFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7
CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1h
eWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNp
dGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBB
U1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwot
ICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQo
YWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0
b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVT
ZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRv
KiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgp
KQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9u
KG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NSwzMyBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWds
b2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBh
bGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklE
KTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRl
KCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0K
KworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSog
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklE
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVE
YXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxX
ZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
QEAgLTE5NSwxMiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHBy
b2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nl
c3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xz
LmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJl
Y3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVz
KQpAQCAtNDQwLDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgog
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
KSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bv
b2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Cisg
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNz
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRp
b25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpA
QCAtNzI0LDMxICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRp
ZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlm
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwot
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpP
bmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJv
Y2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRp
bmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVX
ZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0
ICs4OTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0
d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5MSwxMCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9v
bHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAg
ICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3
b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMs
IHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0Nh
Y2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHBy
b2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4
ICsxMTc1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykK
IHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRp
bWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDAp
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKQEAgLTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4
U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNv
dW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50
cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCAr
MTE5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNp
emVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5l
RW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVu
ZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEy
MTcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZh
bGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5k
ZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1By
ZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjQ3LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZh
dGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2MSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3
LDEwICsxMjc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlz
VmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjg3LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzNDEsMTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDgg
KzEzMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwg
dmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI0LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3Vi
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5
NywyMyArMTM0NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nl
c3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzNzgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDIsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAg
KzE0MjEsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVh
clByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeSht
X3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRU
ZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNp
bmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5j
ZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0Fn
Z3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisg
ICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxi
YWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9j
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAg
ICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IApAQCAtMTU3NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAg
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1f
cmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3Vy
ZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9j
ZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRk
UmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBs
b2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2Fs
bGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
U3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Cisg
ICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0
YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3
dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRp
c3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1Vw
ZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9z
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIy
ICsxNTIxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJM
JiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0lu
RGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpt
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBo
YWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9v
bCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50
LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFz
dFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNH
cmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1Jl
bW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTIsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0
aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCAr
MTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0
ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Qo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTc4
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApA
QCAtMTcyNCw4ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwx
MyArMTYxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJs
LCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBj
b25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BV
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
OTIsMTAgKzE2MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgw
OSwxMCArMTY1Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVk
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5k
ZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE4MjEsMTAgKzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0
YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBV
UkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzggQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhj
b25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNv
b2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhh
c0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERv
d25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBh
cnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTkzMCwxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFn
ID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZ
ZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzQ4LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBt
b2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBj
b25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBh
cnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3NzksMTMg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzkz
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0yMDA5LDI2ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9
IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQ
b29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkg
PSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1By
b2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnBy
b2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2Vi
UHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjMsNiBAQCBIYXNoU2V0
PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhz
aXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9j
ZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nl
c3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5z
aXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjEs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRp
YUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0
ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
UHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQor
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29s
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QK
IHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk2
OSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmll
c0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2Vz
Rm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMTk4OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAg
ICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGlu
Z0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwMDgsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBl
bmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxz
ZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQp
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25I
YW5kbAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3Rv
cmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1f
cGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29v
a2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICBy
ZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAg
IG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMu
Y2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2ll
cyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6
OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2Nr
ZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50
aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3Bh
dGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIwOTEs
NiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0
ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIxOTUsMTQgQEAg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygp
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMp
OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhh
c1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlmCiAKKyNp
ZiBVU0UoU09VUCkKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlm
CisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTI0NjUsMTAgKzIyMzIsNiBA
QCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQog
ICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0NzYsMjMgKzIyMzksMTUgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI1MTgs
NyArMjI3MywxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVT
RShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFz
aFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTMwLDM1ICsyMjkwLDE4IEBAIFdURjo6U3Ry
aW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJl
Y3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vz
c2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBw
Qm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJ
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yNTgwLDcgKzIzMjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBC
b3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJv
cGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFw
cEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBC
b3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzMxLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9h
ZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjMzOSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmlu
ZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZp
ZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAwZGM5MWYy
M2M0MTU0Mzk1YzhlYmY4OTBmMzViZDAxODBjZDUxYWFkLi5iNTU4YTFkOGUxN2NmNTE2YmY4NWY1
MTkzZTE0MGM5YjA1OWZmYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQ
cm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBX
ZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC0xMDksNyArMTEwLDEy
IEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7
CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7Cisg
ICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGljIFdl
YnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25z
dCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwxMSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgdGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRG
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNDYsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVk
UHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0
IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2
b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNzIsOCArMjc2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpN
b2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lk
IGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5n
ZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI4Myw2ICsyODUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5k
TW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3ND
b250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0Nv
bnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2Myw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
TWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3Qg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9u
SURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0
aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWlu
c0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAK
LSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAg
ICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBt
X2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjEsNyBAQCBw
cml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsK
IAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBS
ZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUo
QVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3Bw
CmluZGV4IDBlMGMwNmUxZGVkNDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRk
MDg2ZWM0NWJiNjJkYTZlZTA4MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFT
dG9yZUN1cmwuY3BwCkBAIC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7
CiAgICAgbV9wcm94eVNldHRpbmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4
YWM1MDkyYTMwZGQ5M2M1M2I4ZWU5MzQyLi4zYjcwNWMxZmM5YTcyNTdmYzViYWZkNTIxY2IzNmMz
NTdiOWY2ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCAr
MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRl
cnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQg
PSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byog
cHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nl
c3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5
NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5k
ZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2Iy
MTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBz
dG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFj
Li43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVUTFNF
cnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRv
IFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdz
OwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0
NjlhMDY0YjFjMWFlZC4uZmMzOWMwZTk3M2FhMzVkOGZhYzBmMDUxMDAwZmU2OTI5YThlNzQyYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDYwIEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0
UmF0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZv
ciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNo
V2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEw
ODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJW
aWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBw
YWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdl
CiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0
YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
W3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmdd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldl
YkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJW
aWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5
MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYw
Y2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2Fk
QXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBS
ZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVj
ZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0g
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9G
b3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
Ok5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwog
ICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJD
aGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0
ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdB
TC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNr
cG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4
Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFm
MWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRm
ZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMw
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBE
ZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNl
IGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0
aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1
YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZm
MTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRv
VjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhl
YzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2
ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJ
bmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRh
dGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5z
aW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJi
ZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2Ni
YTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVk
REIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3Mg
JiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIw
ZGViNzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5
NWZkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxk
RXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJG
aWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERh
dGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZl
cnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3Qp
OwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRl
LCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4
aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVz
dE5hbWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRl
RGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7
CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDEx
NjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3
MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJj
ZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4
ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4
LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdl
YlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2gg
dGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBz
ZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQt
cGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9j
ZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7
CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBA
ImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5
Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIy
NGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3Vz
cGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3Mg
QWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNl
IGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5
MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2Vz
cyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJy
b3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2Rh
ZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRh
MjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0x
NjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5k
cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0p
OwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRv
Q29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2lu
ZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhh
bmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZp
ZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBm
ODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkw
YjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
RW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFn
ZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3Rv
cmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wg
aGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRi
b3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAg
RVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFz
RW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAg
IEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJl
cikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4
ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChX
S1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdk
MDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0
YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcg
QEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIz
MWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1
Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNz
UmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
Q2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRw
Um9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRo
Tm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRv
ICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJM
ICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZh
dWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmls
XTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRo
Oml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAg
ICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdG
aWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9U
UlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsK
KworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNl
OwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0
b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmln
YXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9
IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7
CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBp
bnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8
V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4
YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRi
MmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5k
bGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6
IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhb
W1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdl
OkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2
MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2sp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7
CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVz
dGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsg
InRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYg
Kzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
c2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEw
MzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9h
ZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJv
Y2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVk
KTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
ICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMg
cGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VR
KDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29s
LmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
d2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAt
MTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9j
ZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2
aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVD
VF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxhbmsg
PSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwog
fQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdU
aHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAg
Ym9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZp
cnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2
aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFl
Y2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wg
ZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxk
IGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9y
IGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAg
IHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50
ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRG
b3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgewor
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5V
VEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVl
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1l
c3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOwor
fQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3Jp
cHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9
IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50
cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3Jp
cHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBs
ZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vz
c2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAg
ICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJT
ZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZh
bHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07
CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tp
ZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29v
a2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0
Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4w
LjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcy
IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0
cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisK
IFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Np
b24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVX
aXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07
CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nl
c3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVy
dENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3Bs
aXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29r
aWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tp
ZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzph
bGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29v
a2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUu
LmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtz
MykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTVi
OWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhi
NTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21Q
YXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3
aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1
c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBO
ZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdv
cmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0
byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29t
cGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRz
KSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNl
aXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01
MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3Jl
QWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwg
TWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7
Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRi
ODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJh
YTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAg
IHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0
KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICBy
ZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAot
V0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3Vy
YXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4
dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAg
ICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vi
c2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="424976"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409327</attachid>
            <date>2020-09-21 15:13:04 -0700</date>
            <delta_ts>2020-09-21 18:53:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921151303.patch</filename>
            <type>text/plain</type>
            <size>325115</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjEzNjcw
ZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRl
N2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2
NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1f
ZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpA
QCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5h
dGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5
OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQ
b29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBo
YW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9h
ZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxp
c2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0
NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9w
b3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1f
cmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93
bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1By
b3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVx
dWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93
bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmlu
ZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5k
aW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDAp
OworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThm
YTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQs
NyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25s
b2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vz
cyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hh
c0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMi
KSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmICht
X3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Mu
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQ
cm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUK
ICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0
aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNz
QXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVu
aXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJX
ZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29y
a2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktp
dCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5n
KTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0
b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdv
cmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQ
cm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7Cisg
ICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5
OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2Fk
RmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9H
KExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhl
IERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBw
cm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIo
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250
YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9k
b3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lk
IERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93
bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vz
c0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1f
cHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBt
X2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwg
IlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktp
dCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3Mi
KTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4u
NGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFz
aE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmlu
ZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkz
ZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3
ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0
YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3Rv
bVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJv
eHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXgg
YzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0
YWJlN2JmYTFlMjEwY2NiODc5MzMxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29u
dGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUg
IkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIK
QEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBA
IC00OCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUg
PHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIK
KyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNL
X0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQot
ICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQ
cm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdv
cmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0
d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpu
ZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2Vzcygp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5
Pj4gcHJvY2VzczsKKyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0
KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3Mu
Z2V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAg
ICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAg
ICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9j
YWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2Fj
aGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7
CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQ
cm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250
YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5k
aWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0
b3JlUGFyYW1ldGVycygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFt
ZXRlcnMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1l
dGVyczsKKyAgICBmb3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFy
YW1ldGVyczsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0g
ICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hv
dWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7Cisg
ICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9j
ZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3Jr
UHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYgKzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5O
ZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAg
ICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNz
ZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlv
bnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxh
dW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpO
ZXR3b3JrOwogICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVu
Y2hPcHRpb25zKTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCku
c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNl
KTsKLSAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtl
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQot
I2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGgg
PSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMu
dXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCkBAIC0xNjYsMTIgKzI2NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3Jp
Z2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNv
bnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1Bh
Z2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQ
cm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0
dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1f
cHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0
aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjM3LDggKzMzNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBU
ZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3
b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAg
IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nl
c3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vz
c1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9h
ZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nl
c3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6
Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVn
YWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBD
OjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBz
ZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUo
ZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFp
bnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApA
QCAtMTI1Miw0NSArMTMzOCwzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3Zv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9y
ZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93
ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0
b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0
b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNv
bHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
cmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0
ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDAp
OworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBy
ZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNl
ckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNG
b3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Zv
cmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZv
cmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkg
eworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewog
ICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHko
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJv
bVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2lu
ZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4u
OTdhZTVhOTlmNWU2NTIwZTE2ZTQyZGM3ZjQ4YjczOWM3MzRiYzVmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAg
LTUyLDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7
CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3
LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBE
b3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mg
OiBib29sOwpAQCAtODYsOCArOTAsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZv
Owogc3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94
eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Ro
cm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA3LDE3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3Jr
UHJvY2VzcygpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3
b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRl
KCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAg
IHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwpAQCAtMjA2LDE1ICsyMTYsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRo
cm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7
IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lv
bihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcm
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM2LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChj
b25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAg
CiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdl
UHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsy
NTcsMTYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIu
Z2V0KCk7IH0KKworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5nZXQoKTsgfQorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOwor
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFyYW1ldGVy
cygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHBy
b2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAt
MjU2LDcgKzI3NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMyOSwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3By
b2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAg
ICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRp
bmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3Jp
Z2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9hZFByb3h5TWFwPiBt
X2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNlbmRpZgorCiAgICAg
UHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vz
c1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9ySG9sZGluZ0xvY2tl
ZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFudCBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0OSw3ICszNjcsOCBAQCBwcml2YXRlOgogICAgIH07CiAj
ZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBX
ZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJl
ZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmExY2Q4
MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi44MmMxMGU0MWQ1NjI1ZGJhYWRmOTEzYjk0ODA0NDdj
NzBjYzE5ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTAgQEAgYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50KHhw
Y19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vydmlj
ZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBv
aW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNM
YXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAgICAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KQorICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLjA4NWU3ZDI2NWExMzcz
NWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQ
cm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNv
b2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bv
b2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHko
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQo
cHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCkt
PmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1h
bmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9i
c2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBX
ZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAg
ICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsK
LSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAgICAgICAgICAg
b2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNl
cnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsK
LQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17
Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29y
a1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZX
ZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17
Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9u
SUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25J
RCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
Q29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigp
OwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRp
bWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9u
SUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYg
Y29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25J
RCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29r
aWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9u
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6
U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNl
bmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29v
a2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODEx
YTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEg
KzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJh
Y2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsK
IAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxl
bWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29r
aWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGlj
IFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJv
eHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6
Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNz
UHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95
ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcg
QEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZv
aWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lv
bklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0MGYzZjI0NTZmNzEwNTVm
NWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5NTlkYzgzNGExNWVmOGQ1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcg
KzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihi
b29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDEx
ICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRl
c3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYg
RU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50
KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9S
TShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVt
ZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRl
KCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNl
bmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RU
byhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdl
SUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJ
RCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVz
ZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1
LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAg
ICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmlu
ZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJV
UkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAg
ICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwg
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1l
SW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xp
Y2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5k
ZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAgICAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihj
b25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0
SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9
PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdl
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1l
LmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2Vy
KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJs
ZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNS
ZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2Rp
ZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJ
bml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAwMiw1OCArOTk5MiwyNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBX
ZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBp
ZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENs
aWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJhZTUyNTA5MjUyOS4uOWVk
MDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2RlNTkyMDEyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlm
CiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4p
IFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywg
IyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElD
KGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6
OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVw
IC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5u
ZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2
ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQog
CitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9k
ZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYg
QEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlx
dWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtl
VW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQo
bWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0
b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5j
ZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NV
c2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6
V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5h
bHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBX
ZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RF
OiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
ICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFk
ZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJv
Y2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgog
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNo
dXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nl
c3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6
c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00
MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21h
dGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFH
RVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEs
MTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9u
LT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQ
cm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTks
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAw
KTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NN
b2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1l
bW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVF
dmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29y
a1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYK
IH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWlu
IHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0
aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsK
LSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nl
c3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5w
ZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJh
dGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIo
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQot
ICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xz
LmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFy
ZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFy
YW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYK
LQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hh
bmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNr
IHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8v
cHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9j
YWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51
bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBi
b29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsK
LSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFs
b25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQ
cmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0
b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygp
OwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0g
ICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAg
ICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAg
ICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVE
ZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
ICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBm
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGly
ZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdv
cmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNT
dG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFn
ZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
ZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAg
ICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmRE
b21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5T
dG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7
Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5F
VFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0
cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3Rvcnko
KTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0
ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVF
eHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdU
Rk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUo
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAg
IHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFs
ZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMg
cGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdv
cmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDAp
OwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
OwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBz
ZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAg
IGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewot
ICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAg
IH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAg
ICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1By
b3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdv
cmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSAr
NDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vz
c2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAv
LyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0
aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBt
X25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vydmlj
ZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlBy
b2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNz
UHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11
dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkg
JiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19F
UlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3Qg
YXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0K
LQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nl
c3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1By
b3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29s
OjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94
eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3Mu
Z2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0
ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUo
KSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNl
cnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAg
ICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9
OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJv
Y2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7Cisg
ICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNz
IHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdl
YnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUy
OCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQo
KTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vycygp
KTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2Vy
dmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9j
ZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4g
ZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmll
cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92
ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBu
ZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJz
KCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0
b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94
eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVw
LCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2Vydmlj
ZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJz
aXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJv
Y2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2Vz
cyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9v
bC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0g
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRl
eHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJB
Z2VudC5pc051bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2Vy
dmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VH
cm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNl
ckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92
ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5z
KHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3Mp
OwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3Jt
cyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBs
YXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3Jl
LAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50
IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRl
RGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9y
ZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAj
ZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAg
ICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1v
dmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9y
ZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91
dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVj
dGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFn
ZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xp
ZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3Rv
cmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQg
ZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUg
aXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQg
ZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAy
NCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBh
Z2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVT
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMp
OwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUx
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJB
Z2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclBy
b2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRv
d25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5p
dGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0
b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYg
KGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkm
IFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdl
YlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAg
IC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2lu
YWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQ
YWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9
LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxl
RG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNl
ckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdl
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZh
bHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsK
LSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0
ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2ll
cyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0Lgor
ICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAg
IGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBV
UkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQ
YWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3Ry
YWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
VVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFn
ZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVx
dWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBk
b3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBX
ZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQ
YWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAg
YXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNv
dXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHko
KSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZy
ZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAot
UHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewot
ICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBt
X3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCAr
MTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJl
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVy
bFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1
cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdp
c3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCArMTI5Niw4IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNz
IDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVy
bFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXND
YWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMz
MSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2Fj
aGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlG
b3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2Fy
ZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENh
Y2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVs
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRl
cnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiArMTM1Miw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0
aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVE
b3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJh
bWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50
aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7CisgICAg
cmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5h
bWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNl
aXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVt
b3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1f
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJl
cGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsx
NDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9j
ZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
UHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAgIHdoaWxlIChzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVw
ZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywyMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5
UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQ
b29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBw
cm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3Jr
UHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUg
d2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAg
IGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMp
CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsK
ICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBj
b25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAg
IH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZs
YWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFn
ZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwg
dG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdl
SUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0
aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisg
ICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
U1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
OiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAgdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRv
JiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJu
IHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsK
ICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4
IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEuLmViYmNhYTRlY2IxZDcz
NzE3YjFhMzU0ODJhNzJmYTljZjRkZTFlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9i
c2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgw
LDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoK
ICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5
KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0
dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAg
Ly8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJl
bnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJ
UEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2Fn
ZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JT
ZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRz
IHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2Up
OwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSop
OwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dl
YlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAv
LyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFT
dG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3Jl
OyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBS
ZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3Jl
Jik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBs
dWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJp
bmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBj
bGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsK
ICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vz
c0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBi
b29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYp
OwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZh
dWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAg
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
ICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAg
ICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBA
IC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9p
ZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBt
X3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVl
OyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdv
cmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxs
cHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29s
IGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNz
UHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3Mp
IHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0K
LSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9Cisg
ICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2Vy
dmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3Qg
T3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29u
dHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
ckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2
aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDgg
KzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAg
ICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FN
RVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29y
ZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVj
dGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5z
ZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0
UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5
RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1t
ZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0g
ICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAg
dm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAt
NTQzLDYgKzUxNSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVz
c2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NTYsOCArNTM5LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZv
aWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTYyLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90
aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAsOSArNjAzLDggQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQ
cm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0
aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7Cisg
ICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVj
dGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBt
X3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MjAs
NiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+
IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4g
bV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Np
b247CiAKQEAgLTY4MCw4ICs2NTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1w
bGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFs
IHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0
cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRz
OwogCkBAIC03MTQsOCArNjgzLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVy
bWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYg
VVNFKFNPVVApCkBAIC04MjAsNyArNzg3LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBt
X2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAg
ICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAg
c3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwpAQCAtODMxLDIwICs3
OTgsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBt
ZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0
IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIzYjg1Li4yZTU0
YTgxMTVjNDg4N2YwYTFkZDgzZWRmNWJkY2JlM2E0MDhhMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggN2M0NDA4NTE2Nzcz
NjhiNWRmODlhODZmZjRkM2I1MTUzNGI5MGJiNy4uYTIwNzI1NDg4YmI5MzllMzdhNmE0ZGJkNzRm
NWU3NTUzMzg3MGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9y
dCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjIsNCArNTY0LDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRp
dGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBl
bnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAw
ODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVkNGMyMDUwMzdkLi4zZDI5MTU5MDRkM2U1NzQy
Yjg2NzIyNWRhODNlZWYxMGMwNzczODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgi
CisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Mklu
aXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBACiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAi
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAg
LTgzLDEzICs4OCwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJl
dHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7Cisg
ICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAg
ICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vi
c2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVy
YWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEyNiw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6Oldl
YnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZp
Z3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVn
ZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3Rl
cldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjgsMTcgKzEzOSwxMiBAQCBXZWJzaXRlRGF0
YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25J
RCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAg
fQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsK
KyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAg
ICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xl
dG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Np
b24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQcm9jZXNzUHJveHkt
PnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc1
LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAg
ICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBh
dXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVE
YXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklE
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxsRGF0YVN0b3Jlcygp
LmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0
b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vzc2lvbklEID09IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigq
dGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJz
aXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQ
cm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJl
dHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5v
bkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVy
biBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nl
c3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRv
IHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBu
dWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29s
dmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1NiwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJz
aXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBv
b2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0
Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1f
bmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
IHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNp
dGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9
IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczMywyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGlt
ZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0g
ZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNz
QWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9v
bHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3
aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2so
KTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1By
b2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2Vi
UHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQo
KSk7CkBAIC04OTMsMTQgKzg5NSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYg
KCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2Fs
bGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVX
ZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiAr
OTkxLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMTYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lu
cyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFND
YWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9z
dE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KQEAgLTExODAsMTggKzExNzUsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vj
b25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRT
ZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
Zzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQs
IENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwg
bWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9u
SUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVU
YXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTIxMSw4ICsxMTk5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb24KICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3Vu
dCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEyMDgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMs
IENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nl
c3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTIzMSwyMCArMTIxNywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNv
bmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJl
dmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEyMzUsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIg
KzEyNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjYx
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMDcsMTAgKzEyNzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEz
MjIsMTIgKzEyODcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMwMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEzNTMsOCArMTMxMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEz
NjgsMjIgKzEzMjQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
Y29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJG
cmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJy
ZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEzNjYsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MiwxMiAr
MTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ3Niwy
NSArMTQwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRG
cm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZy
b20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTUwNiw2MCArMTQyMSw0MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQYXJh
bWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c3Vi
bWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFu
ZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklE
LCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3RydWN0IENh
bGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAg
ICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3Vu
dGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
ICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
ICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAgICAgICB+TG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDcwLDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiBtX2NvbXBsZXRpb25IYW5k
bGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0KLSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dy
ZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdh
dG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKKyAg
ICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IExvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgCisg
ICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1
bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwotICAgIH0KKyAgICB9KTsKKyAgICAKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
SW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwg
c2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNv
b2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUwMywxMyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0
aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vz
c2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nl
c3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJh
c2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3RpY3NEYXRhYmFzZUhh
c0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2NDMsMjIgKzE1MjEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0
U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRMYXN0U2Vlbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21h
aW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklE
LCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxh
c3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBp
c1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCArMTU0MCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQs
IGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBp
c1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIGJvb2wg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwx
OCArMTU1MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNl
ckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1By
ZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Qo
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTcwNCw4ICsxNTY3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5p
bmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VF
eHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNzE2LDcgKzE1NzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjAwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNzU0LDEzICsxNjEyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRV
c2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29u
c3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTYyNCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3Qg
VVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTc5MiwxMCArMTYzOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFy
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wg
aXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xODA5LDEwICsxNjUyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQ
RGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2MiArMTY3MCwzOCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRp
b25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3Jh
dGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
ZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlv
bkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJM
JiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2ll
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVk
U2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsxNzMyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKFdl
YkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRl
c3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2UK
ICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJs
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NDEsMjAgKzE3NDgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVT
aXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZp
cnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc2Nyw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBjbmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk3
OSwxOCArMTc3OSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRo
aXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3Rv
cmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBz
ZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTk4LDggKzE3OTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDMsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMs
IEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYK
IH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQ
b29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBy
ZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJl
dHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0
ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIwNDMsOSArMTgy
Myw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6
cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0
YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTIwODQsOCArMTg2MSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25z
dCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUlu
Zm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVj
aWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8o
KSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0
ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9yPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlPcmlnaW5zKGNvbnN0
IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAsNiArMTkxNiwzMCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgp
OworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQorewor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1l
KCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC0yMTY5LDE3ICsxOTY5LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25J
RCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAg
ICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5
MSw4ICsxOTg5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
YWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAw
OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwMjMsMTUgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDUzLDE5IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNz
ZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4g
V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBj
b3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAg
ICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2ll
KSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAg
ICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBj
b29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAK
LXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChh
dXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxs
b3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3Ig
KGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAg
LTIzMjksOCArMjA5MSw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRh
U3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwot
CiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAg
aWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUs
NyArMjE5NSwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRl
cnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24o
KTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEw
ICsyMjI4LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tp
ZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjM1
LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5j
dGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3Rv
cmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
CkBAIC0yNTE4LDcgKzIyNjksMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJs
ZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkK
IAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjI4NiwxOCBA
QCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNT
dG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlz
KTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRh
VHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBf
Qk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJB
cHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFp
bnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzE5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpm
b3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUK
IAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCku
Z2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0
b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjMyNyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzMzUsMTQgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhj
b25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5k
bGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRl
bnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5k
ZXggMGRjOTFmMjNjNDE1NDM5NWM4ZWJmODkwZjM1YmQwMTgwY2Q1MWFhZC4uYjU1OGExZDhlMTdj
ZjUxNmJmODVmNTE5M2UxNDBjOWIwNTlmZmFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xh
c3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xh
c3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9y
OwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5
LDcgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURh
dGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVm
YXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3Jl
Jik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkg
Y29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAg
IHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAg
cHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHBy
b2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
ICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNSArMjQ2LDggQEAgcHVibGljOgogCiAgICAg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1
cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVz
KCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjcyLDggKzI3Niw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24o
V2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgog
Ci0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgp
IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiArMjg1LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAg
ICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3ICszNjMsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rv
cnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAg
dm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAg
c3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBC
b3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCArNDAxLDYgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsK
ICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAog
ICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MTksNiAr
NDIxLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4g
bV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3Rv
cmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAK
ICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFjMzkz
Li42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dl
YnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdz
JiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5ncyk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGlu
Z3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSwg
MCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNk
ODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNmY5NjNmMTQyMTAwNDc1OGUyZDY1
ZWQ5NjI2ZTJhNDlhM2Y0ZjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
QEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdv
cmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
OwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nl
c3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5
NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5k
ZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2Iy
MTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBz
dG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFj
Li43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVUTFNF
cnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRv
IFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdz
OwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0
NjlhMDY0YjFjMWFlZC4uZmMzOWMwZTk3M2FhMzVkOGZhYzBmMDUxMDAwZmU2OTI5YThlNzQyYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDYwIEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0
UmF0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZv
ciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNo
V2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEw
ODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJW
aWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBw
YWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdl
CiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0
YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
W3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmdd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldl
YkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJW
aWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5
MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYw
Y2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2Fk
QXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBS
ZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVj
ZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0g
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9G
b3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
Ok5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwog
ICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJD
aGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0
ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdB
TC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNr
cG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4
Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFm
MWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRm
ZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMw
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBE
ZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNl
IGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0
aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1
YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZm
MTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRv
VjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhl
YzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2
ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJ
bmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRh
dGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5z
aW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJi
ZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2Ni
YTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVk
REIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3Mg
JiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIw
ZGViNzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5
NWZkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxk
RXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJG
aWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERh
dGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZl
cnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3Qp
OwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRl
LCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4
aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVz
dE5hbWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRl
RGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7
CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDEx
NjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3
MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJj
ZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4
ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4
LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdl
YlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2gg
dGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBz
ZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQt
cGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9j
ZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7
CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBA
ImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5
Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIy
NGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3Vz
cGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3Mg
QWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNl
IGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5
MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2Vz
cyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJy
b3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2Rh
ZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRh
MjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0x
NjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5k
cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0p
OwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRv
Q29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2lu
ZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhh
bmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZp
ZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBm
ODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkw
YjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
RW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFn
ZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3Rv
cmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wg
aGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRi
b3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAg
RVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFz
RW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAg
IEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJl
cikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4
ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChX
S1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdk
MDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0
YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcg
QEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIz
MWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1
Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNz
UmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
Q2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRw
Um9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRo
Tm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRv
ICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJM
ICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZh
dWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmls
XTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRo
Oml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAg
ICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdG
aWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9U
UlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsK
KworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNl
OwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0
b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmln
YXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9
IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7
CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBp
bnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8
V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4
YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRi
MmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5k
bGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6
IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhb
W1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdl
OkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2
MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2sp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7
CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVz
dGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsg
InRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYg
Kzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
c2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEw
MzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9h
ZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJv
Y2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVk
KTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
ICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMg
cGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VR
KDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29s
LmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
d2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAt
MTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9j
ZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2
aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVD
VF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxhbmsg
PSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwog
fQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdU
aHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAg
Ym9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZp
cnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2
aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFl
Y2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wg
ZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxk
IGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9y
IGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAg
IHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50
ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRG
b3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgewor
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5V
VEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVl
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1l
c3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOwor
fQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3Jp
cHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9
IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50
cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3Jp
cHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBs
ZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vz
c2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAg
ICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJT
ZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZh
bHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07
CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tp
ZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29v
a2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0
Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4w
LjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcy
IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0
cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisK
IFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Np
b24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVX
aXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07
CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nl
c3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVy
dENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3Bs
aXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29r
aWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tp
ZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzph
bGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29v
a2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUu
LmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtz
MykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTVi
OWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhi
NTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21Q
YXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3
aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1
c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBO
ZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdv
cmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0
byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29t
cGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRz
KSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNl
aXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01
MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3Jl
QWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwg
TWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7
Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRi
ODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJh
YTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAg
IHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0
KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICBy
ZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAot
V0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3Vy
YXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4
dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAg
ICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vi
c2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409341</attachid>
            <date>2020-09-21 18:53:21 -0700</date>
            <delta_ts>2020-09-21 18:54:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921185320.patch</filename>
            <type>text/plain</type>
            <size>327906</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZj
YTZhNjQwY2IyZjMxYzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNh
bGxiYWNrKCkKIH0KICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nl
c3NQb29sOjp4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBv
aW50TWVzc2FnZTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2lu
dE1lc3NhZ2UpCi17Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0K
LSAgICBmb3IgKGF1dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9j
ZXNzLT5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vz
cy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9u
X3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0K
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQz
YTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2
M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNh
bmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlm
IChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsx
MDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBj
b25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJv
Z3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlm
ICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJv
eEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3Rl
bVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJv
eEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhh
bmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwor
ICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5z
aW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojpk
aWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3Vn
Z2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWlu
dDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICgh
bV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdl
SUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigp
KSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3du
bG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEw
IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYm
IHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9h
ZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3Qp
LCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFp
bi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlz
LT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3Jl
KQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJv
eHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAg
ICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3
UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVj
dGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwog
ICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3du
bAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1f
cHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3Rl
ZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxv
d092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93
bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhp
cywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2Vz
dGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3du
bG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlv
bikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWRE
ZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBt
X2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBk
ZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxs
b3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZh
MDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVm
OWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAo
TmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0
cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50
KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpA
QCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95
KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3Vu
ZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7
CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjph
cHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0g
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0
aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsK
IH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
CkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9k
b3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJy
ZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlw
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0
d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0g
ICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNz
QXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxv
YWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAg
ICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNz
ZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMi
X3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQg
ZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7
CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxv
YWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNz
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3du
bG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5
LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93
bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJS
ZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJv
eHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wu
Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9h
ZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2Fk
SUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVt
b3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJv
eHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rv
d25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7
CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQo
KSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlB
c3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0g
bnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMn
IGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1f
cHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5k
ZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFl
MWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1E
ZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9h
ZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3No
b3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4
YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJl
MGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3Rh
cnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nl
c3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0
TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygq
dGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQg
Y3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bv
b2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3Vz
dG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0K
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1By
b3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQog
CiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9S
ZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNm
YTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0YWJlN2JmYTFlMjEw
Y2NiODc5MzMxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0
LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNl
bmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFj
a0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lm
IEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAj
ZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0
aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHBy
b2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9j
ZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkq
PiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAg
ICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCku
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nl
c1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vz
cyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsK
KyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3Jr
YXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAg
ICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9s
YXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Cisg
ICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2Vu
ZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgp
KTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1l
c1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExl
Z2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChh
dXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsg
IWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0Vt
cHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5k
bGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJz
LnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7
CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVy
cygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQorewor
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBm
b3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30K
Kworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vz
c1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5B
QkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNl
bHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90
dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigp
KQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFj
a2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0
aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5h
ZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKQEAgLTk4LDYgKzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vz
c1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxv
YWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1v
dmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9u
cyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUs
MTUgKzIwOCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMu
cHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAg
IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsK
IAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAg
bGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1
ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
ZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JN
KFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQ
b29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9w
cm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0x
NjYsMTIgKzI2NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25z
dCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdl
KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAg
aWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1h
a2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxv
YWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2ws
IHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVy
biBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9j
ZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDgg
KzMzNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3
b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3Mg
cHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bv
b2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTgsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3Bh
dGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
ZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwogfQogCkBAIC0yNzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAg
IGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAg
ICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5p
bnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
QEAgLTMzMSwxMSArNDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2Vy
dmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2li
bGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdU
Rk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRv
KiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTM5MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRG
aW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAg
ICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7
Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29u
bmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24o
KSkKQEAgLTEyMDUsNyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOwor
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSAr
MTMzOCwzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBt
X3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUt
PnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9u
SUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7Cisg
ICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Np
b25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7
CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0
YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9u
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6
ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBS
ZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3Jr
ZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVBy
b3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhz
ZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwog
fQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMo
KQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVBy
b2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3Jl
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9y
ZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChh
bnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAo
IVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nl
cyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dy
b3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5k
ZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdk
ODE1NWE0YTU5MTJmODlhOWJjODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0Niwx
NyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7
CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3Mg
U2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29r
aWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9v
bDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVj
dCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Owogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3Qg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkg
ZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJv
dHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7
CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nl
c3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1
c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAt
MTAyLDEyICsxMDgsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29y
a1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1By
b2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQ
cm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRp
YyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7
CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAg
IERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQ
YWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAg
ICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6
CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJv
dHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNl
bmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAg
ICBib29sIGhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3Zl
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRh
U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAg
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0Zv
ckZpbGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAg
LTIyOSw2ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVt
ZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNl
TG9hZERpZFNlbmRSZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZElu
Zm8mJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFS
ZWZlcmVuY2U+JiYpOwpAQCAtMjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKIAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigp
IHsgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJu
IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICB4cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRwb2ludE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4
cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Ik5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0
ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwx
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAot
ICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFj
a0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNo
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAg
ICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxEb3dubG9hZFByb3h5TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVS
ZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAg
ICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTsKICNlbmRpZgorCiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBt
X2FjdGl2aXR5Rm9ySG9sZGluZ0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFj
dGl2aXR5VmFyaWFudCBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAs
MTEgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6
U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9y
ZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBt
X2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4u
OTFjMTkzMWYyZTY1Y2YxYzk3N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0KQEAgLTUxLDggKzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBD
RXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAg
aWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6Onhw
Y0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Vu
ZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2lu
dE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdv
cmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5
YjEwOTIwMWI2MTAuLjA4NWU3ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJ
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJh
Y2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIq
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29y
a1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9j
ZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBy
b2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJD
b29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclBy
b3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4
dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAg
ICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02
NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNz
aW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFs
bENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUm
IGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2Nh
bGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgewor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShz
ZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UK
ICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
TW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2ll
KHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQs
IGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYg
Y29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRV
UkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAg
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9u
SUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5n
Q29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lv
bklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4
NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAg
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhU
VFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0
UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0
N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdi
NTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJh
Y2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2Fs
bGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5
IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdl
cj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnRO
YW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdl
YlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNy
ZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZp
cnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEw
IEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0g
ICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0Rp
ZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAot
ICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nl
c3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NE
aWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJD
b250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3Vw
cGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVy
czsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29v
a2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdv
cmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAog
I2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5k
ZXggZDNiOGMzNTU0MGYzZjI0NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJm
MjQ1MTgxYTQ0ODA5NTlkYzgzNGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRp
b24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRy
b2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250
cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xs
ZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9s
bGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNw
ZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50
SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNh
YmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0z
MjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQ
X0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6
OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9u
SUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25J
RCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNl
Q3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUlu
Zm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1
cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJM
KCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJl
bnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlciht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVl
c3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50
aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIo
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1
ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVu
dGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMs
NyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJh
bWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24g
JiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRy
aWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAg
ICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVy
bCgpKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRy
aWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0
aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9u
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAw
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29u
c3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9z
dC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwg
fSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291
cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6
Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdh
c1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2
aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwg
TW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFt
ZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRp
ZgogCkBAIC0xMDAwMiw1OCArOTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJl
dmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNr
QXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
fQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJy
aWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVl
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252
ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25z
QXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xp
Y2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5
ODBkNjNjNWRjNTJhZTUyNTA5MjUyOS4uOWVkMDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2Rl
NTkyMDEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApA
QCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
RyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmlu
ZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNl
c3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQ
b29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3Rv
bVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9v
bDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4g
Y29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
KTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6
Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwg
bV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQog
ICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+
KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRI
aXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFr
ZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlz
aXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShN
QUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlx
dWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5
ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlm
ICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYg
c2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkK
ICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVt
ZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGlu
aXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0
aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFu
YWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2
IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291
bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxF
KEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQog
ICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVk
VXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlv
bkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFr
ZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBh
Z2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEsMTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsK
IH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3ND
b25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigp
OwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4
dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFn
ZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTksNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5n
dWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFj
Y2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQo
Ym9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4
aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkp
OwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNz
OjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChh
dXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nl
c3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5
UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwog
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRp
ZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVy
dGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1
c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJl
bW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91
ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxsT25NYWlu
UnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewot
ICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3Rv
cmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29r
aWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAg
IH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNz
UHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBh
cmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9W
ZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlk
ZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBs
aWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFt
ZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNo
ZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlBy
b2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJp
bmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0Vt
cHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0g
ICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygp
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNz
KCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0g
ICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZv
ciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJl
dmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioq
KioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAg
ZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0g
ICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUo
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0g
ICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3Ry
aW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0
b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlm
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAg
ICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAg
ICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAg
IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZl
SVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAg
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgp
KSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVu
Y2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxz
ZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0
KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFz
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5k
YWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5T
dG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAg
IGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3Jl
LT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtD
YWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0
b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9y
YWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhz
dHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlm
IChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBz
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAg
ICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAg
ICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291
cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9y
aWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25z
dCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0
b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAg
ICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGly
ZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAg
ICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFs
dGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5h
dGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZl
U2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
Ci0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAot
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9t
YWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8v
IEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUg
bmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3Jr
UHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vz
cy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhX
ZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBl
bmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3Rl
cmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNz
aW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNl
c3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBX
VEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQ
cm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJv
Y2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRz
LnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQ
cm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSArNDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNz
UHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vz
c2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91
bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhl
IHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQog
ICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nl
c3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQ
cm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJv
eHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkp
XSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFko
IUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRp
ZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAg
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShy
ZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNv
bm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVy
KQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNl
bmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3Ry
YWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwg
JnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRh
U3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURh
dGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAg
ICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9j
ZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5n
ZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0g
ICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0
b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5
IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2Vy
IHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwg
cHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJv
Y2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9j
ZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJv
eHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vz
cy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
bwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVu
dENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAg
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFu
IGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9
JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0g
ICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JT
ZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRl
RGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJv
eHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2Vydmlj
ZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNl
cnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlBy
b2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9j
ZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQ
b29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRh
U3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUo
bmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAg
ICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3Vw
LT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VX
b3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlz
aFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDog
cHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VX
b3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2Vy
dmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNT
RVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUs
NyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdh
cm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94
aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bv
b2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBp
biBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1f
c2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9y
ZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5p
dGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChi
b29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAg
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRl
cnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0
aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZp
bmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5l
Y3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0
aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0x
Mjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRl
V2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNv
bmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8g
YXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxl
LgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIg
cGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNy
ZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURh
dGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJh
dGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAyNCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJl
ZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5w
cmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nl
c3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZvciAoYXV0byYgc2Vydmlj
ZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgq
bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRD
b250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBp
ZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2
MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nl
c3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQ
YWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vz
c2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFn
ZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwg
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBX
ZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2Fk
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFn
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9u
YWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2
ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRl
ZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29v
a2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0
LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVS
TC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlh
dGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0
ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJM
LCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdl
bnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9u
SUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3Vu
ZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJl
cXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJM
IG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9w
IGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAg
ICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+
cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0
UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFn
ZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZv
clVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2Vy
QWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7
CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJv
eHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmls
ZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyAr
MTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJv
Y2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBj
b25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2Us
IHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5k
bGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVz
dW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1l
RGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsK
LSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25s
b2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwg
MCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8g
bV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJ
RCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJl
dHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVu
dGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewog
ICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewog
ICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5n
Q29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVy
VVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwot
ICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6
OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2No
ZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAg
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNv
bGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDog
TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hl
bWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTYxOCwxMCArMTI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9i
YWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
LnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVt
ZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMzMSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDAp
OworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1v
ZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2Rl
bCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNh
Y2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpA
QCAtMTY3NCwxMiArMTM1Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1
ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAg
IHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFj
a2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3
b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNz
ZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0g
bV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJt
aW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJl
cGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
OwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29y
a2VycygpOworICAgIHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2
aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywy
MSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRz
IGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sg
b24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBw
cm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3Mg
OiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10gewor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsx
NzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3Mp
IHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdl
SURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdv
cmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0
ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBh
Z2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBA
IC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVN
ZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6
YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VX
b3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
V1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsK
KyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8m
IHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYw
OGI5NTBiNmFiNzEuLjdjMjU0ODkwMzY2ODljZjlmYWViODc4MTkwNjc5ZGFmMTExNmEzMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdl
UHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQo
c2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2Vz
cyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rp
b24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9j
ZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6
U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3Ig
TmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNo
TGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQ
cm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5
LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20g
dGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkq
KTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJp
bWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dl
YnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7
CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwg
U3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmlu
Zz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAg
IFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJl
d2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0lu
V2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0
UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMw
Nyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJD
b250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAg
c3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAg
ICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQog
ICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7
IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdl
UHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
dm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2Vydmlj
ZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdv
cmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNp
emUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVy
SWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29y
a2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNl
V29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5k
QXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7
CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4
LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpD
cm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAg
ICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVn
SW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczsg
fQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9v
bCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsg
cmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxF
KENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQo
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxT
dHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTM4LDkgKzUxMCwxNSBAQCBwdWJsaWM6CiAgICAg
aW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBv
aW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2Up
OworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBT
dHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2Vi
Q29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVt
cG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1Niw4ICs1MzQsNiBA
QCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQ
cm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7
CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTgxLDE0ICs1NTcsNiBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJp
bmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFp
bmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5ICs1OTgsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4g
bV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2Jq
ZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nl
c3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdv
cmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nl
c3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4
LDcgKzYxNSw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2Fk
Q2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2Fj
eUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0
aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDggKzY0Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21l
bW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVy
SW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFy
KiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdl
YkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3Vw
cGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2NzgsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3By
b2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7
CiAKICNpZiBVU0UoU09VUCkKQEAgLTgyMCwzMSArNzgyLDEzIEBAIHByaXZhdGU6CiAjZWxzZQog
ICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9Owog
I2VuZGlmCi0gICAgYm9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxz
ZSB9OworICAgIHN0YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsK
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKICNl
bmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90
PiBtX2VuZHBvaW50TWVzc2FnZTsKLSNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdl
KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJk
PFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShU
JiYgbWVzc2FnZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhj
b25zdCBUJiBtZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4u
NTQ5MmE5ZTllYzZlMjg4ZTBmYmM5MWQyNTQ5YWUwOWIyMmQ2ZjcwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBs
dWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bv
b2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpAQCAtOTU1LDkgKzk1NSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5p
c2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0CiAgICAg
fQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9j
ZXNzUG9vbCgpLnhwY0VuZHBvaW50TWVzc2FnZSgpOworICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdl
ID0gd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdl
KCk7CiAgICAgaWYgKGVuZHBvaW50TWVzc2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2Vu
ZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2Uu
Z2V0KCkpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigp
LT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLjYy
OTcxMDcxYmU5MzgxZjc3N2RhZWQ1OThkMWJkMDY0MTUzYTY3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9y
dCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3Ry
aW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3
b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyh4cGNfb2JqZWN0X3QgZW5kcG9pbnRNZXNzYWdl
KQoreworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CisgICAgICAgIGlm
IChwcm9jZXNzLnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmlu
ZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXByb2Nlc3MuY29ubmVjdGlv
bigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHBy
b2Nlc3MuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7CisgICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UpOworICAgIH0KK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVk
NGMyMDUwMzdkLi4zZDI5MTU5MDRkM2U1NzQyYjg2NzIyNWRhODNlZWYxMGMwNzczODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBA
CiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURh
dGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAgLTgzLDEzICs4OCwxOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxs
b3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQor
CiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lz
dGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6
OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEy
Niw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFBy
b2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhT
ZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0
Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0x
MjgsMTcgKzEzOSwxMiBAQCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAK
ICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1
bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9z
ZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCku
Z2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1f
c2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94
eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBn
cHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRv
KiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgp
KQorICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwog
I2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc1LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFT
dG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVz
KCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5h
ZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sK
KyAgICByZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpIHx8IG1fc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3Jl
OjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Np
b25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUm
PigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTcs
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdl
YlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAg
IHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7
Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1
NiwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JE
YXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0
byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6
TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Okxh
dW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
eworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAg
ICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBm
ZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0
YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0
YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
YXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZv
ckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczMywy
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1By
b2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JE
YXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBh
dXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBl
OjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
bmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
KSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZB
TExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgor
ICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAg
ICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAg
ICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1
ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJv
Y2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3Zh
bChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzg5NSw5IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVs
ZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZp
ZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArOTkxLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0
IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAg
ICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICgh
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkt
PmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmln
aW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21h
aW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJl
Z2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExNzUsMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgY29uc3QgVmUKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNl
V29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNv
bmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hU
aW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
ZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rpbmco
KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRp
bWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNl
V29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNl
cnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwg
MCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4
ICsxMTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmll
cyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4
U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMTk5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0
Q291bnQsIENvbXBsZXRpb24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1f
c2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25Ubyht
X3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjIxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIzMSwyMCArMTIxNywxMyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNTYsMTIgKzEyMzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIgKzEyNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChibwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRm
YXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjYxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8K
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzUsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjIsMTIgKzEyODcsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMw
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxMCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwoYm9vbCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNjgsMjIgKzEzMjQsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJG
cmFtZVVSTCwgY28KIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ1LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE0MjcsMTAgKzEzNjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQ0MiwxMiArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3Rl
ZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NDU5LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29u
c3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ3NiwyNSArMTQwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIGNvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRU
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQyMSw0MSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Np
b25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Np
b25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVk
U2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZh
dGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFy
dHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogCi0gICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8
Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7
CisgICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0Fn
Z3JlZ2F0b3IoKQorICAgICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsx
NDcwLDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYpPiBtX2NvbXBsZXRpb25IYW5kbGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07
Ci0KLSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBh
ZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUlt
bWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShk
YXRhKSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yID0gYWRvcHRSZWYobmV3IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKSk7CisgICAgCisgICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdv
cmtQcm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lv
bklELCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0p
OwotICAgIH0KKyAgICB9KTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFu
ZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSht
X3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCAr
MTUwMywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0Rh
dGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExh
c3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MjEsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBz
ZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWlu
SURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Np
b25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVS
TCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biwgU2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFS
ZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTY3MCwxMCArMTU0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkubWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0
U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dy
YW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVt
b3ZlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwxOCArMTU1MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGhhZAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
Pmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTY3LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChi
b29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlu
cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1NzgsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5
LDEwICsxNjAwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjEyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9w
VXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTc3MiwxMyArMTYyNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNo
aXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUlu
RGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNS
ZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
VXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTYzOCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjUyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2MSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25J
RCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29u
c3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTgzMyw2MiArMTY3MCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENy
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1Np
dGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9z
c1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRl
Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29v
a2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2Fs
U3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9u
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJG
b3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVu
YWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09D
T0EpCkBAIC0xOTE5LDEwICsxNzMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAg
ICAgICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2lu
Z01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9u
SUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lv
bklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQwLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2Vi
Q29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNo
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NDEsMjAgKzE3NDgsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUg
PSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFs
bEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6
Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NjYsOCArMTc2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmly
c3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlV
UkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBh
cnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNu
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcoY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk3OSwxOCArMTc3OSwxMyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5G
b3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFy
dHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTk4LDggKzE3OTMsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29u
ZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDMs
MTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0
Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vi
c2l0ZURhdGFTdG9yZSgpKQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0g
dGhpczsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVm
UHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVf
dCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHBy
b2Nlc3NQb29sczsKQEAgLTIwNDMsOSArMTgyMyw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nl
c3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29u
CiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9j
ZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODQsOCArMTg2MSw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcm
IGhvc3QpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNl
cnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAw
KTsKIH0KIAogVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFT
dG9yZTo6bWVkaWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVj
dG9yeSkKQEAgLTIxNDAsNiArMTkxNiwzMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAg
fQogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
K3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxs
cHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5k
KElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5LDE3ICsxOTY5LDE1IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
bV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9z
ZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nl
c0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Np
b25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
ZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
CiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSks
IG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsxOTg5LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2sp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0
cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDAp
OwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRp
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNz
aW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBl
bmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIy
MjcsMjAgKzIwMjMsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAg
bmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFi
bGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC0yMjYyLDQ4ICsyMDUzLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYK
IAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsm
Y29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29v
a2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFk
ZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQ
ZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29r
aWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQo
Ym9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hl
ZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hl
ZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgp
KSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0
aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjksOCArMjA5MSw2IEBAIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjE5NSwxMCBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAg
IHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNS
ZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9z
c1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBw
YXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjI4LDYgQEAgQVBJOjpIVFRQQ29va2llU3Rv
cmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2ll
U3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nl
c3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFp
bHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmln
aW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lz
dGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjM1LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWls
cykgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0g
ICAgICAgIH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRp
cGxlIHBvb2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9u
SGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1f
c2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShk
ZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90
YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyNjksMTIgQEAgYm9vbCBX
ZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
LSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkoKQpAQCAtMjUzMCwzNSArMjI4NiwxOCBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVS
TCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1l
LCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRT
ZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNz
aW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzE5LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlu
cyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0g
ICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisg
ICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAg
cHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApA
QCAtMjU4OCwxMCArMjMyNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmRE
b21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9t
YWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAg
LTI1OTksMTYgKzIzMzUsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihi
dW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5j
bGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMGRjOTFmMjNjNDE1NDM5NWM4ZWJmODkwZjM1
YmQwMTgwY2Q1MWFhZC4uODQ3ZWVjZTAzZWZhMTUyMzM1MWM2YmFhY2YxM2IwODI2N2U2NWJmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNz
IFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwog
Y2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vi
c2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6
U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNp
dGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVu
Y3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlz
dGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlz
UGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9
CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9u
SUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
Y2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9p
ZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAg
ICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwx
NSArMjQ2LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5n
ZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0
ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNv
bnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsK
LSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0g
ICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKTsKIApAQCAtMjUxLDYgKzI1NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNo
T25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyh4cGNfb2JqZWN0
X3QgZW5kcG9pbnRNZXNzYWdlKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwpCiAgICAgdm9pZCBz
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYmKTsKICAg
ICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1Byb3h5U2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI3Miw4ICsyODAsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdl
YkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAot
ICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYgKzI4OSw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTksNyArMzY3LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogICAgIHN0
YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gYXBwQm91
bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzk3LDggKzQwNSw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgeyB0cnVlIH07CiAj
ZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29raWVzOwot
ICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7CiAKICAg
ICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDE5LDYgKzQy
NSw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1f
Y2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3Jl
OworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAj
aWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKaW5kZXggMGUwYzA2ZTFkZWQ0MmMxNGI4MDJlMTU4OWYzMWRjNjI5ODJhYzM5My4u
NjRiNmM3NGQwODZlYzQ1YmI2MmRhNmVlMDgyMjNiMjhkYjczYTU3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3Vy
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJz
aXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYm
IHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3MpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyksIDAp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgx
OWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjZmOTYzZjE0MjEwMDQ3NThlMmQ2NWVk
OTYyNmUyYTQ5YTNmNGY5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBA
IC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3Jr
UGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlm
IChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNz
aW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNTIsOCArNTEsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQy
OS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBA
IC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9w
dGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0
YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUg
YSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3Rv
cmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3
b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhh
biB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUg
PSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4
IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTkuLmFjMDRlMzhhNTdiMjE1
OWJlYjQyZjM4NDc5YjQ0ZjVlMjZkZWRiYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CiAKQEAgLTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5
cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklE
LCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9y
YWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQ
b29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRhYy4u
N2ZlNGFjYTBjNWQyZDBlN2ZjMGQ5ZDVhNGZhMjdlYmNjODBhNjc1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcs
MzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1F
OiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3Rv
cmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91
bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNv
b2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAg
cGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJh
bWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0
ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CisgICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1faWdub3JlVExTRXJy
b3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdu
b3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3b3Jr
UHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBX
ZWJzaXRlRGF0YVN0b3JlLgogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk4YjM2Y2M3YWQ3NTFhYmExMzA5Nzc3MzI4NDY5
YTA2NGIxYzFhZWQuLmZjMzljMGU5NzNhYTM1ZDhmYWMwZjA1MTAwMGZlNjkyOWE4ZTc0MmEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw2MCBAQAorMjAyMC0wOS0yMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJv
bSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJh
dGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRv
VjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJE
YXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbToKKyAgICAgICAg
KHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNp
c3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
VGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29y
a1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3Jl
Lm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1b
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0p
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW06CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocy5tbToKKyAgICAgICAgKHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyk6Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RD
b250ZXh0KToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Ig
bm9uIGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgw
NzRmMWE4MWI2OTgxLi4zM2Y0NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNmNmYwOWM5ZjRmIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nl
c3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmll
dyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFn
ZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQog
ICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFy
dHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFtw
cm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JXZWJD
b250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2ViVmll
dyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5
ZmQ1OWYyMjhhN2U4YmQ3NDk3MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNm
Y2Q4N2JmMjA0NWViYjNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0
UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0
dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2Vp
dmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0
b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9y
ZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAg
ICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2
MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcs
NyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFk
MjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRk
YjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVs
ZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBm
aWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhF
eHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFk
MGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3
NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
SW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1Yy
KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhl
IGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0
ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMy
NDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3
NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tX
ZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1l
OkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBk
YXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRh
YmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYz
Nzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEy
YTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERC
LCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYm
IG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRl
Yjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVm
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGlj
IHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4
aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmls
ZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04
Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdp
bkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRh
YmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJz
aW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9u
VW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsK
ICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwg
aXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlz
dGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0x
NTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3RO
YW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURp
cmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwog
fQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYz
Mi4uNmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAs
NyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0
YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYw
Njk2N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3
ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJW
aWV3ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRo
ZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlRoaXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vj
b25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBh
cnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vz
cy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwog
ICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRv
IHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJk
YXRhYmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5t
bQppbmRleCA4ZWM2NWYwYTNiYTkzNzM2ZmRiNGY5ZGRmZWY3NWNlNjAwMDVmZDBkLi41MTBiMjRm
NTY5ZDIyYmQ0MGE3YWRiZTI1ZWNmZDBlY2ZjOGFjNzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtODgsOCArODksOCBA
QCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkpCiAKICAgICBydW5U
ZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJvcnQgRm9yIFN1c3Bl
bnNpb24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBTdWNjZXNzIEFm
dGVyIFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBTdXNwZW5k
SW1taW5lbnRseUZvclRoaXJkUGFydHlEYXRhYmFzZXMpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vd2Via2l0Lm9yZyJdXTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBp
cyBjcmVhdGVkIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5k
Q2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQiKTsKIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVT
aXplLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJU
ZW1wRmlsZVNpemUubW0KaW5kZXggNTM2NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJh
ZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdlNjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJUZW1wRmlsZVNpemUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3Mg
dG8ga2VlcCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBm
aWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8
TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9y
Om5pbF07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0
M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdjNWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2
NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYg
KzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1Qo
V0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVR
KEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYy
LDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
ICAgIEVYUEVDVF9XS19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsK
IAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0Nv
bnRpbnVlID0gZmFsc2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRv
dy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQsIE5TRXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3
LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5n
ZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAg
ICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4
MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIw
ZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0
Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0Vu
dGl0bGVtZW50cykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOltbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XV0pOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBs
ZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbDsKLSAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2Uu
V2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3Jl
ID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhh
c0VudGl0bGVtZW50ID0gW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVY
UEVDVF9UUlVFKGhhc0VudGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0Vu
dGl0bGVtZW50KTsKICNlbmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBF
WFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERh
dGFTdG9yZS5tbQppbmRleCA2MDk4ZThkYWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3
Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUwNTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hO
b25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0K
QEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tX
ZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
c2ltcGxlMl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCA5NWRjOWQ5OGRmMTNiMDcwNWUwODE3ZDA1
ODcyNjUxMjBjMTg4ZDIzLi5kZjMyMGQ2NGRhZGJkZDFlZTI4M2Y4NjVjMTQ0MjNmM2FjNTU2NGJm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBA
IFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0
d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsK
IAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJW
aWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0K
aW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFh
OTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
TmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIs
NyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jl
c3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENh
bkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJv
b3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0
cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxl
TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAq
ZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1
cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAq
aXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07
CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpp
dHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAg
RVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVV
UkwucGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJV
RShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisK
KyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJh
dGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFz
ZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsK
QEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9y
ZVN1c3BlbnNpb24pCiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0
aW9uXTsKIAogICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0
cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwog
Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwor
ICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50
ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdL
VVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5
YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRlOWY4Zi4uMmY4ZTM0ZGJhNmRhNDcyMzU2NTVmZjBkYjJh
ZGNhMWJmOGM1NjcyMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
Ci0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBC
YXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tT
V1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpA
Ik1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
Om1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMz
LDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwog
Ci0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3Rp
bmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0
ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5
ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9u
KQogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNl
dENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7Cisg
ICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1
LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
ZWF0aW9uKQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRp
bmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nl
c3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vz
c1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vz
c0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7
CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2Vy
UHJvY2Vzc0NyZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAg
ICAgZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBh
Z2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgx
dSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5n
ZXQoKS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdl
YnNpdGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
V2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21w
bGV0aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2
MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vz
cyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25v
cmluZ1ByZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nl
c3NTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2Vydmlj
ZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0
cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1Rf
RVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0g
dHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0K
IAotVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhy
b3VnaFNlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0Jl
Zm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmly
c3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZp
Y2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJz
dExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2Vydmlj
ZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2Fk
QWJvdXRCbGFuaykpOwogfQogCkBAIC0xOTQ0LDExICsxOTU2LDExIEBAIFRFU1QoU2VydmljZVdv
cmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2VzcykKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7
CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJW
aWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNk
ZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1Nzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQ
Q29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZp
bmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBi
ZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBk
ZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3Rv
cmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVy
ZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0
ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAg
RVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRG
OFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30K
KworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0
PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAw
OyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJp
bSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0
PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVW
aWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Np
b25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAg
IE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vz
c2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1
ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOwor
CisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEu
Y29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6
c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tp
ZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
Il1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZp
ZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJp
bmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBU
RVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9u
KQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0
aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpA
QCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNz
UG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5p
c2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRD
b29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxl
cnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tp
ZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1s
ZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQxNmNkMjNiMjJlLi5h
YzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFr
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2No
ZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVj
dG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMp
CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1Yjlk
MTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uYmY4YmRlODMxYTI4NTliY2YzNDEzODA2MTg4YjU5
MWZjYWE5ZDNhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KQEAg
LTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0
aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIC8vIE5vdywgd2l0
aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0
b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0
d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3Jr
IGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8g
bmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3Jkcykg
ewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
ICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
b2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05T
U2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmll
ZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtNTM5
LDcgKzUzOSw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERhdGFTdG9yZUFm
dGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBAIC04NTcsNyArODU3LDcgQEAgVEVTVChXZWJLaXQsIE1l
ZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUgPSB0cnVlOwot
ICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggOWQzN2NjZWRkYjgy
MTU3NDc1ZDgxZjEyMjBmNDU2Yjg2NGMzYjE3MS4uNjMzMjZmNjg1NmJjNjA1OWRjNjM3OWYyYWE1
YzAwNTBhMDc4NGFiZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKQEAgLTEwNjEsOCArMTA2MSw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVU
b0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBy
ZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdL
Q29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
LCBmYWxzZSk7CkBAIC0zMTM2LDcgKzMxMzQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJ
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAg
V0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOworICAg
IFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRhU3Rv
cmUoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCkKQEAgLTMxNjcsOSArMzE2NSw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0
dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdL
Q29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0
aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQo
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAg
V0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNp
dGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409342</attachid>
            <date>2020-09-21 18:54:36 -0700</date>
            <delta_ts>2020-09-21 20:09:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921185435.patch</filename>
            <type>text/plain</type>
            <size>328165</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uNmI0NWMyYmQ5ZjI2YTQ2ODU4ZDE3N2I1Nzc3
YjMwZjYxZDA3ZThlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2ll
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KQEAgLTE0OSw5ICsxNTAsMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vz
c2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llQWNjZXB0UG9saWN5KCkpOworICAg
IGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6
TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCmluZGV4IGNh
N2Y1NWU4NjZiZGFkNGIxZTM1MmU4ZjY0MDU3YmFiYzQ2MjgzMmQuLmViNzQxODIzNWY1NzA5MzAz
OTYwMTliZTQ0NzIxZGRjMDlmYTk4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaApAQCAtODAsNyArODAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZ2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJik7
CiAKICAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5KTsKLSAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
KT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kp
PiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggYWNkNzU0NDBkODNmMzQ2
NjUwYzlmMzNiNzViNWQ1ZDA5MzUyMTNiYS4uNmZkZjU3NzJhYTZhYWUzOTQwMmE5YTg5ZjU2Yzg0
ZjdiZDQzNTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTM2LDcg
KzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RSZWZDb3VudGVkIHsKICAg
ICB2b2lkIERlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSkgLT4gKCkgQXN5bmMKIAogICAgIHZvaWQgU2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpIC0+ICgpIEFzeW5jCi0gICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGlj
eSkgQXN5bmMKKyAgICB2b2lkIEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYwogICAgIAogICAgIHZvaWQgU3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB2b2lkIFN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYmU4ZDk2NjYyYmU2ZGNk
ODVmYTNjMzI5MjlhZTBmMGI1ZDE4MjM0My4uN2Y0Nzc3MTMyZDUyNDc1ODE4Mjk4MWFhZjBjMThi
NzJiN2JhMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKQEAgLTM0NywyOSArMzQ3LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYm
CiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNl
c3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0
ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVy
cy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
T3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNl
U2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRl
cnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29y
a2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZp
Y2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Np
b24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBw
bGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5p
dGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTUwNSw4ICs0OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wg
c2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwg
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxs
cHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBA
IC01MjEsNyArNTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIu
UHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlm
aWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklk
ZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2ll
QWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsK
IH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0g
cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9y
RWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vz
c2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZjMzdkZjI4YWVlYTA3YWY4My4uZGM4NmYz
OTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9u
SUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
Jik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBB
TDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYp
OwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAog
ICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2IEBAIHByaXZhdGU6CiAKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBt
X25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRy
PFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNiNzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2
ZmRhMTA0YmYuLjAyZGRiOTIzNGU5OTljM2U2Y2RjZGNmMGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NTREtWZXJzaW9uOwogICAgIElQQzo6
ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICNlbmRpZgotICAgIGVu
Y29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRh
U3RvcmVQYXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNj
ZXB0UG9saWN5OwogICAgIGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjgsOSArNjgs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0xvY2FsOwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNz
OwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlOwogICAgIGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlOwogfQpAQCAtMTE2LDExICsxMTMsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+
PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0
ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKQEAgLTE0MiwyMCAr
MTM5LDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDEx
Y2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQyMTBkOWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIx
MDc3ODM1ODQ4NDZjOTBkMDEwYTAzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
QEAgLTcxLDcgKzcxLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgog
Ci0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NSwxMiArODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2Ug
eyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAg
ICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IGRhNjM1OTEyNDIyM2RiOTcwMzBkMWVhNzdiYzAwY2Vl
NTFmYjAxN2QuLjUwMTBmOWE4NjkwMzkwZGZmZTlhMzQ0ZTk5MDViMjRlNjY4NWM3YWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRs
eShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYK
IAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwog
ICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewog
I2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5k
ZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0
ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDEx
ICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0
NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYg
bmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJh
bCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1w
dHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0g
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29v
a2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMu
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3Mu
ZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLics
IHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7
CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vz
c2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0
d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUo
bmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0
MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJv
cnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBj
b25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsK
ICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVU
TFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJj
YzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAK
QEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxl
OwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
PiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVu
c2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsK
LSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29v
a2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5Owog
ICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2
IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+
IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRl
Y29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYw
OGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUw
MjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdD
b29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmlu
ZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4
MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0NjljMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3Jl
OjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0
b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2
IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAg
dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wp
IHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAg
aWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRW
ZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxD
b29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhh
bGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFu
YWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNv
b2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1h
bmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRD
b29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0K
QEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwo
V1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBj
b29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVu
ZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tp
ZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
ICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNv
b2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdl
ci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29v
a2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9v
d25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAg
ICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsK
IH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29v
a2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29r
aWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tp
ZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5j
b29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3Vs
ZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgog
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdl
YkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5E
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xp
Y3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRv
JiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29v
a2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSAr
MTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIm
IG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlx
dWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZp
bmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3Rp
ZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFy
dE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkg
ewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAg
ICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJP
YnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQ
cm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1h
bmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVu
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5y
ZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xD
cmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nl
c3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQ
b29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nl
c3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAv
LyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8g
Zmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3Vy
ZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4K
LSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3
UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29r
aWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29v
a2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJG
b3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQ
Q29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQot
ewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAg
ICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
KG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nl
c3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6Omdl
dEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaApp
bmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBk
YjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwot
CiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRp
YyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0
YzQzMzM1ZjFiNGNjOTkwLi42NWY4YjUzZjViM2QzMDVjZjI4MGJhNWQzMGFhZTM3YjM5YWNmNDkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTQx
MSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0
UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENv
b2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tD
b250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdL
V2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYg
QEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0K
IFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCku
bGVha1JlZigpKTsKQEAgLTU3NSwxMSArNTYzLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxs
b3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9J
bXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRl
U2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC01ODcsNyArNTcwLDcg
QEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihX
S0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQog
CiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVm
IG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRlbnNpb25zUmVmKQpAQCAtNjE5LDEyICs2MDIs
MTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhX
S0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRl
eHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4
dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3Rv
cmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3Jl
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCmluZGV4IDFk
OGZhYjhhMTQ4NmFhZGI0OTQxNDRiOThmMTBlOTM2MzhkMGM1ZTYuLjJhYjZlZjg2ZjUzMGU3N2Y3
NGNiZDVkZjU4NjJhYzRkMzBiNzk4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5oCkBAIC0xNjgsNyArMTY4LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U3RvcE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRl
RGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAKIFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7Ci1XS19FWFBPUlQgV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQp
IFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdL
X0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoV0tDb250
ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBX
S0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBX
S19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0
RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmgKaW5kZXggYTAyNTAxMWY3MGNjNjU5ZjVmYWEwOGE3ZDZjYmIzZmY1
NmVlNmEzOC4uZDgzOWNhY2IyOGJhNTY1ZGM5NWE4MzkzYmZjY2FiOTM4ZGFkY2M1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAt
ODMsMTEgKzgzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tD
b250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tD
b250ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lkICgqV0tDb250ZXh0SW52YWxpZE1lc3Nh
Z2VGdW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUpOwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1
bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXgg
OWRkYTU5MWM5NTE4OWFiMGMyNWFjNTU0NjZjMGEyYmZjMzkyN2ViYy4uYjc4YTkxZTMzZWRmOWUy
OTRiYjRkOGQ0YzBkZGY1N2NlNTAxNmI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC02OSw2ICs2OSwx
MSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENv
bmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJh
dGlvbiksIHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3Rv
cmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3Jl
KQoreworICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
YzNmYTFiZjNmOTI0OGMyZmU0OWJlMTI0Mzk2NDQxMWY4MzFkMmE2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTUwLDYgKzUwLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3Jl
Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19FWFBPUlQgYm9vbCBXS1dl
YnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURh
dGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBpc0VwaGVtZXJhbCwgdm9p
ZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFl
NmNjYjc0ZjFmZWQ1Yi4uYTgwMmI5N2M3YjQxNmY5NmJiYTU0ZmViZTdhMWRkZDQzODNkMGJmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNI
YXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBf
cHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0tICh2b2lkKV90ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsK
LSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JU
ZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9p
ZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7
CkBAIC00MzUsMTIgKzQxMywxMiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hN
YXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogCiAtICh2b2lk
KV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09MKXVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTU2MCwxOCArNTM4LDYgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OihCT09MKWJhY2tncm91bmQKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7Ci19Ci0KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MKLXsKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQb29sLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIC0gKGlkIDxfV0tHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPilfY29yZUxv
Y2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYwNCwxMSArNTcwLDYgQEAgc3RhdGljIE5TRGljdGlvbmFy
eSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNo
TWFwPFMKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4gX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVu
dCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9u
U3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAgICAgX3By
b2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlKFdl
YkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgK
aW5kZXggNjc2OTAxNWUwODU1ODk5NGNkOGEyMTlhMTdhOWM2OGFkZTNiNTM4My4uYmY0OGNhMWM1
MmMyMjE5NzM2OGI4ODI5MDUwNzIyM2YwZjIwNmNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3
LDEwICs4Nyw2IEBACiAtIChfV0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihO
U0RhdGEgKilyZXN1bWVEYXRhIHdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAq
KWRhdGFTdG9yZSAgcGF0aDooTlNTdHJpbmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGls
ZSBubyB3ZWIgY29udGVudCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjAp
KTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9u
bHkuCkBAIC0xMjIsMTMgKzExOCwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihO
U1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dl
YlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBp
b3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQ
YWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQp
X2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVj
dGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0
b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRp
b25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tf
QVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0
ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClf
c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJM
ICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxk
U2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5t
bQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li5hZTljNDUw
Nzc5MDg2Y2MxZTMxMTRjZTEzZjJkMjE4OGU3ODdmMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYx
Nyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0
b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAo
Qk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICop
ZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9X
S1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxl
Z2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMsMzIgQEAgc3RhdGljIFZlY3RvcjxXZWJL
aXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRh
UmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcworewor
ICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCist
ICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmluZGV4IDk5MzIwMTA0NmI1NTFjM2YyOGRm
MmRjMGEwMzQ2ZDdiYzc5YWM1ZjQuLjQyMTVkYjc0N2JhMzIyZmFlYjhhNDdlMTY3NWE2NTgzODE0
NzI2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaApAQCAtODUsOSArODUsMTcgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlv
bnMpIHsKIAogLSAodm9pZClfcmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdG86KE5TVVJM
ICopbmV3TmFtZSBmb3JEYXRhT2ZUeXBlczooTlNTZXQ8TlNTdHJpbmcgKj4gKilkYXRhVHlwZXMg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOwogCist
IChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcg
KillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdlYWspIGlkIDxf
V0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwog
CistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9p
ZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJP
T0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5
ODM2ZWU0NGY5YWNmMGUyNzBkNzBjOTVkMTZiZTY3OGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAt
MjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdENvb2tp
ZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
ICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIK
QEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CisgICAgICAgIHJldHVy
biB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAgIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpA
QCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAog
ICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29v
a2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VC
S0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdF
UiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFn
ZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29r
aWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0g
ewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAw
KTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBb
bWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdF
RF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTc3
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9T
b3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0x
OTIsOCArMTk1LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xp
Y3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KSwgW10oKSB7IH0pOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3
ICsyMjYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1v
dmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAg
ICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNzEsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIs
IFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxl
LCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRl
biBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAg
ICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3Jl
OjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFn
ZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsK
ICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzE4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIK
ICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0g
YWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNh
bWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9j
ZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29r
aWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVU
RjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0
Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZy
b21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxw
dHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNv
b2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29r
aWUoKSk7CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAg
Z19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFk
b3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1l
IFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2Vz
cyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29s
LgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29v
a2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpD
b29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNr
X3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApp
bmRleCA4OWJlNTZhZDcxZDcxNTY5MTJhMjY5MTUzMDU3ZGY1MjdjZGQ0NDYwLi5jZmYwMzU4NmRm
OGExZmI5NmE2MmEwMTdhM2M0NmU1ZjQwZGUyZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDA0LDcgKzQw
NCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBv
YmplY3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHBy
aXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYt
PnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAg
ICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAg
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0o
VXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdl
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5n
IHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3
ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CkBAIC0xNjAzLDggKzE2MDIsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaG9z
dAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2
LT5kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBj
b250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1l
KSkpOworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsK
KyAgICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7
CiAgICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMy
OWViYWVhN2QzODY1Li4zMDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246
OmRlbGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCku
dG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2Vy
ID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uNGM4NDVhMGVjNzI1NjU5Y2ZlNzljZWEzNWQzY2JhOTY2ODM0NjE0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiBj
bGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKICAgICB2
b2lkIHN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFs
OwogICAgIHZvaWQgc3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkm
LCBMZWdhY3lDdXN0b21Qcm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBI
YXNoTWFwPExlZ2FjeUN1c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29s
TG9hZGVyPj4gbV9sb2FkZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3YTY0MDQxYTI5MWQ1
ZjI5NzM1MTc2ZTMxZWE3MGY1ZWQ1NTZjLi4xOWVmY2E2YTY0MGNiMmYzMWMyYTg3NTUwNmIxZDY2
OWQ2ZGM3NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0aWMgdm9pZCByZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRl
UHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCld
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICB9
KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNjYsOCArMTY3
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBpZiAo
IVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJL
aXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5
UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwot
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAg
IGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57
CkBAIC00OTMsMjIgKzQ5Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBOU1Vz
ZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJv
b2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNv
cmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0g
V2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAg
ICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0
cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdl
YktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94
eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQy
SFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0
ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQo
KSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRs
ZXJEZWZhdWx0c0tleV07CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVj
dEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdl
YlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29s
VmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFi
YXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFi
bGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhw
ZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFw
cEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3Rl
ZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSArNTg1LDYgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0CiAgICAg
cmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9CiAKLWJvb2wgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0
IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQo
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50
aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJy
aWdodG5lc3MoKQogewpAQCAtOTQ3LDIzICs5MjEsNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZWdpc3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxsYmFjaygpCiB9CiAjZW5kaWYKIAotT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9T
T2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9p
bnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBt
X3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQ
cm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVj
dGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwg
ZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2EwMjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3
Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNiMDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKQEAgLTc1LDgg
Kzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3du
bG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpCisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEzIEBAIFdlYlBhZ2VQcm94eSogRG93
bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkK
IHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogewot
ICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5k
bGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9h
ZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9CisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0
ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0
aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7CisgICAgQVNT
RVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwg
aGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEzMSwxMSAr
MTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0
b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29s
LT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwg
bWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVs
bHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHku
Z2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6Ondp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJl
cwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3Qo
KnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVx
dWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkp
OwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAg
aWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1By
b3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChw
cm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0
byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5t
X2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsx
NzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFt
ZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBk
b3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5h
dGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpz
YW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGlu
YXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAg
ICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVz
dGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93
T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJj
ZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3du
bG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCisgICAgOiBtX3Byb2Nl
c3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgiY29tLmFwcGxlLm11bHRpdGFza2luZy5z
eXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAgLTcwLDE0ICs3MCwxMiBAQCB2b2lkIERv
d25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHZvaWQgRG93bmxvYWRQcm94eU1h
cDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3Mp
Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7
CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3Jv
dW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwg
MCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNh
dGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9CiAKIERvd25sb2FkUHJveHkmIERvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8s
IFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAtOTIsMTMgKzkwLDEyIEBAIERvd25s
b2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VV
bmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRv
d25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwog
CiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24pOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2lu
Z0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLT5wcm9j
ZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5
cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fz
c2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJ
ZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6
VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3Bl
bnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3Ig
VUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25s
b2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+
ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwxMiArMTA2LDkgQEAgdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkp
CiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0
ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJ
RCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0
IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vz
c1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NF
UlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCi0gICAgbV9wcm9jZXNzLT5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOworICAgIG1fcHJvY2Vzcy5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogICAgIGRvd25sb2FkUHJveHkuaW52
YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZElEKTsKIApAQCAtMTMz
LDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKCkKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9hZHMudmFsdWVzKCkpIHsKICAgICAg
ICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwogICAgICAgICBkb3dubG9hZC0+aW52YWxp
ZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxv
YWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwogICAgIH0KIAogICAgIG1fZG93bmxv
YWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9MT0co
UHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRl
ZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3Mg
YW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3Byb2Nlc3MgPSBudWxscHRyOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2Ux
MzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFjZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZv
cm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
bV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+
PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2Ug
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJv
dG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJlOGMwNmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3
ODNmMzA1Li5kNmMzMzIzZGQ5M2U2OWY1NmFkZjZiZTBkMmExYjE0ZjA4MjI0NTEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwCkBAIC00NCwxNyArNDQsMTcgQEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6On5MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90
b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3Rv
Y29sSUQsIHJlcXVlc3QpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJl
cXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9w
TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94
eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2Nv
bElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCmluZGV4IGMxZjQ3MDhiODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEy
MWYuLmYzZGI1MTUxOWQ2Y2JiNGFiZTdiZmExZTIxMGNjYjg3OTMzMTczMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIK
IAogI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkFQSUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5TWFwLmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
dGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAs
NiArNjMsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVE
b21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAg
LTcwLDIwICs3NCwxMTggQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2Vy
dGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vz
c1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkK
LSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0
aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1
cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2Vz
LnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7
Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZh
dWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAgaWYgKCFwcm9jZXNzLmdldCgpKQor
ICAgICAgICBwcm9jZXNzLmdldCgpID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuICpwcm9jZXNzLmdldCgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisg
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsK
KyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bv
b2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hl
bWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9y
YWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsg
IWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3Rvcnku
aXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRh
aW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3Jl
UGFyYW1ldGVycyA9IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsK
K30KKworVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgZm9yIChhdXRvJiBzdG9yZSA6IG1fd2Vic2l0
ZURhdGFTdG9yZXMpCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0b3JlLnBhcmFtZXRlcnMo
KSk7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQor
eworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3Jv
dW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNB
dEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09M
X01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
UmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlz
LCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAs
IG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7
CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3Mo
KTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDAsNyBAQCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3du
bG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsK
KyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hP
cHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMDgsMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0
aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5j
aGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6Omdl
dExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5j
aE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hP
cHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsK
LSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjYsMTIgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3Vu
ZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZv
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQog
ICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+
KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2Fk
UHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVh
dGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwg
ZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0
aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMzcsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0
YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9y
Z2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMg
dG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgqdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0
YXRlcygpCkBAIC0yNTgsOSArMzU4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBp
ZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1By
b3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM3MSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29s
ID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXAp
CiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQyNiw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBB
TDo6U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRv
cE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkg
ewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZN
b3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwg
KnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25J
RCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAg
IGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ4Miw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVu
Y2hlciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYg
KG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQ
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhp
cy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyOTAsOCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rp
bmcoUEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRE
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzMzgsMzEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwg
Q29tcGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpGbHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRh
U3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vz
c2lvbklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMuYWRkKHN0b3JlKTsKIAogICAgIGlm
IChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAg
YXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVy
cygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAg
aWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVk
SW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5k
aWYKICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5j
b250YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7
Ci0gICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9uSUQpOworICAgIG1fd2Vic2l0ZURhdGFT
dG9yZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lv
biB7IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFTdG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsK
IH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFT
dG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChz
ZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAg
ICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAg
ICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURh
dGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVy
biB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CkBAIC0xMzM3LDcgKzE0MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ry
b3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYg
cmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wu
ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBX
VEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJh
YmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdl
ck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTUwMCwx
NiArMTU3MiwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJRCwg
d2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlm
IChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wg
YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Cisg
ICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAo
YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYg
KCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlG
cm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVn
cm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5k
V2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlk
QmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAg
ICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25U
b0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1
YzEwODI1ZDE4Mjc3NjUzYjQuLjBiZmNmNDM1YjQ3ZDgxNTVhNGE1OTEyZjg5YTliYzg3Mjg4MmRm
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5oCkBAIC00NiwxMiArNDYsMTcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogI2luY2x1ZGUgIlhQQ0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0
ci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7
CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc4
LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBE
b3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mg
OiBib29sOwpAQCAtODYsOCArOTEsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZv
Owogc3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94
eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Ro
cm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA4LDE3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3Jr
UHJvY2VzcygpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3
b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRl
KCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAg
IHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwpAQCAtMjA2LDE1ICsyMTcsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRo
cm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7
IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lv
bihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcm
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM3LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChj
b25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAg
CiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdl
UHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsy
NTgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIu
Z2V0KCk7IH0KKworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5nZXQoKTsgfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgeHBjX29iamVjdF90IHhw
Y0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlLmdldCgp
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5
KCk7CisKKyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAg
ICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMo
KTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9j
ZXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1
Niw3ICsyNzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6
Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVk
KCk7CiAgICAgdm9pZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudApAQCAtMzEyLDE2ICszMzQsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9j
ZXNzUG9vbDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAg
IEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5n
RGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnNDYWxsYmFja3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9k
b3dubG9hZFByb3h5TWFwOworCisgICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVH
QUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFBy
b2Nlc3NUaHJvdHRsZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NU
aHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRG
aWxlczsKICAgICBQcm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXM7CkBAIC0zNDcsOSArMzcwLDExIEBAIHByaXZhdGU6CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNz
OwogICAgIH07CisgICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50TWVzc2Fn
ZTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOwor
ICAgIFdlYWtIYXNoU2V0PFdlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZXM7Cisg
ICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmVi
YTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjkxYzE5MzFmMmU2NWNmMWM5NzdhZGYzYWU2
Y2FlZGIwNjA5MDBiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMSBA
QCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZl
bnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hT
ZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBD
RW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7Cisg
ICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6
OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPm1fZW5kcG9pbnRNZXNzYWdlID0gZXZlbnQ7CisgICAgICAg
IGZvciAoYXV0byYgZGF0YVN0b3JlIDogbV9uZXR3b3JrUHJvY2Vzcy0+bV93ZWJzaXRlRGF0YVN0
b3JlcykKKyAgICAgICAgICAgIGRhdGFTdG9yZS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2lu
dFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRl
eCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3
MzViZTdhMTI3OGVjMWRmYjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNz
YWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1
cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclBy
b3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3Jr
UHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJD
b29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQ
b29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5
KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50
KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgp
LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVN
YW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVP
YnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJD
bGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8g
V2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0g
ICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAg
IG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2Jz
ZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7
Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQot
ewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdv
cmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVm
V2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQot
ewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lv
bklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9u
SUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJv
Y2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGlt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0
aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lv
bklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4m
IGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQog
ewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9u
SUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29v
a2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYm
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3Rh
cnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lv
bklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNl
cnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lk
ICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHBy
b2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENv
b2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgx
MWE5ZC4uNmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDEx
ICs1Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxi
YWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7
CiAKLWNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8
QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBs
ZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFu
YWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29v
a2llTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRp
YyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYg
bmV0d29ya1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclBy
b3h5KG5ldHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJv
eHkoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJD
bGllbnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJ
OjpPYmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShX
ZWJQcm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vz
c1Byb3h5Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwog
Ci0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJv
eWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94
eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAg
IC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2
b2lkICgpPj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Np
b25JRCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQ
dHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1
ZjViNGQ3YTc4MjI2MGQzODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhk
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3
ICsxNzQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24o
Ym9vbCBjb250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwx
MSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lm
IEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNz
YWdlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dCgpLCAwKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZP
Uk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlk
ZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAj
ZW5kaWYKQEAgLTQ0MjksNyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0
VG8oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFn
ZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdl
SUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5V
c2VDcmVkZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcy
NSw3ICs0NzE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lz
dHJhYmxlRG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAg
ICAgICAgICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJp
bmcoKSB9OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVy
VVJMKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwg
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAg
ICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4s
IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFt
ZUluZm9EYXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7
CiAgICAgICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENs
aWNrQXR0cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+
ZGVzdGluYXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTUzNzcsNyArNTM2Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24o
Y29uc3QgV2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdl
dEhvc3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3Qg
PT0gc291cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFn
ZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFt
ZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNl
cikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlz
UmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9k
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5
SW5pdGlhdGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3Qg
V2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENs
aWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjll
ZDAzY2NhN2IzODRiNmJlYWNhMTJjOTI0ZGY4MmNkZTU5MjAxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRp
ZgogCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4u
KSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMs
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJ
QyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29s
OjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfRVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIl
cCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFu
bmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18p
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIs
NiArMjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0K
IAorVmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1f
ZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2
IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5p
cXVlPEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFr
ZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50
KG1ha2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtT
dG9yZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFu
Y2VHcmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNz
VXNhZ2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0
aW9uKQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+
YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAg
V2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uJiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9U
RTogVGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VS
ZWNlaXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
CiAgICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBh
ZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUo
TUVESUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlBy
b2Nlc3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYK
IAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
aHV0RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9j
ZXNzZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6
OnNpbmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAt
NDAyLDE2ICs0MDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9t
YXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5B
R0VSKQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRp
ZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIx
LDExICs0MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlv
bi0+c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJu
IG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2Vi
UHJvY2Vzc1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwg
MCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBA
IC00NDksNyArNDMyLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNz
TW9kZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVN
ZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQ
cmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNl
c3Npb24pCiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAg
Ly8gTGVhdmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28g
dGhhdCB0aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAg
bV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogfQogCkBAIC03NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vz
c1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZp
ZXJJc1ZhbGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5
ICYmIHdlYWtUaGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0
IGF0dGVtcHQsIHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19
Ci0KICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9j
ZXNzQ3Jhc2hlZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQ
cm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9v
bDo6c191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJv
eHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNz
LmdldCgpKTsKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNp
dGVEYXRhU3RvcmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXpl
KCkpCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdl
dCgpOwotICAgIH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3Mg
cG9vbCB0byBob3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nl
c3NQb29sID0gcHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAog
ICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIg
fTsKLSAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHBy
b2Nlc3MgPT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJv
eHkoKSkKKworICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcykgewor
ICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2Vz
cyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3
ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1
MjgsMzUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0
KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNl
V29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMo
KSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNl
V29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNl
cnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJv
Y2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFu
IGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgh
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94
eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8g
bmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2Vy
cygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJv
eHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZp
Y2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vi
c2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nl
c3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0K
IAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgq
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAot
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250
ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5j
ZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNl
cnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9j
ZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdl
R3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVz
ZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJv
Y2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1v
dmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlu
cyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNz
KTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4gV2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3Rv
cmUKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9y
bXMgdXNpbmcgQnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMg
bGF1bmNoZWQgdXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9y
ZSwKICAgICAvLyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVu
dCBXZWJzaXRlRGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0
ZURhdGFTdG9yZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3Rv
cmUpCisgICAgaWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
I2VuZGlmCiAKQEAgLTEwMzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlh
bGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAg
ICAgICAgcHJvY2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZN
b3ZlKGluaXRpYWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1f
cmVzb2x2ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVv
dXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5l
Y3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29y
a1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNs
aWVudCwgUmVmPEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0
b3JlKCkpIHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0
IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJl
IGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVk
IGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3Jl
LmdldCgpKTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAg
IH0KIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEw
MjQsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dCA9PSB1c2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQgPSB1c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzcy5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dCk7CiB9CiAjZW5kaWYKQEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRl
cmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRh
U3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0g
c2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUo
V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkKQEAgLTE0MDEsNyArMTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3Rv
cmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBk
b3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGlu
aXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFT
dG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluPiBpc0FwcEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlm
IChpbml0aWF0aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBX
ZWJQYWdlUHJveAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAg
ICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdp
bmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2
YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5n
UGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsg
fSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwp
OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJs
ZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFy
dHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2Ft
ZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFn
ZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShm
YWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2Fk
SUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7
Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRh
dGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4K
KyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAg
ICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0g
VVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9Owor
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5n
UGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0
cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFn
ZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Cisg
ICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJB
Z2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0
YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJl
cXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3gKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2Us
IGNvbnN0IEFQSTo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVz
b3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0g
ICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93
bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRo
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwotICAgIH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwg
cGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwogfQogCkBAIC0xNTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVm
cmVzaFBsdWdpbnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAK
LVByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsK
LSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJ
ZGVudGlmaWVyKCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1l
ZFByb2Nlc3NJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8g
bV9wcmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQg
KzEyMzAsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c1NlY3VyZSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVt
ZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1
cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAg
ICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxT
Y2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
QEAgLTE1NzgsMTQgKzEyNTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShb
dXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJs
U2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05v
QWNjZXNzKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQpAQCAtMTYwNiwxMCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
R2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQor
ICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5l
dHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3Rv
bVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2Vz
cyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
Q2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEz
MzEsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNh
Y2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5
Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0Zvcndh
cmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2Rl
bF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUg
dGltZW91dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nl
c3MoJmRhdGFTdG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZy
YW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAg
IHJldHVybiBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRh
dGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJO
YW1lIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVj
ZWl2ZXIpCkBAIC0xNzUwLDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1l
bW9yeVNhbXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihy
ZXBseSksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRp
YWxzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12
b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwot
ICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCAr
MTQzMCwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJv
Y2Vzc2VzKCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAo
IW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwot
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFByb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRl
U2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRv
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQog
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1
cGRhdGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0
eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNz
UG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4g
cHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10g
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29y
a1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhl
IHdlYiBwcm9jZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAg
ICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0g
ewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBm
b3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KQorICAgIGNhbGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7
CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bv
b2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkg
Y29uc3QKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgaW5lZmZpY2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAg
ICB9KTsKICNlbmRpZgpAQCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9Eb21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpG
bGFnPiBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBh
Z2VQcm94eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRD
b21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4s
IHRvRG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFn
ZUlEKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQor
ICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
czogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0
byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2
aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBi
b29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVy
biBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7
CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRl
eCBkMWYxZmU5NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi43YzI1NDg5MDM2Njg5
Y2Y5ZmFlYjg3ODE5MDY3OWRhZjExMTZhMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VP
YnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xh
c3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBj
bGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4
MCw3ICsxNzksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2
b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAog
ICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6
CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94
eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJl
dHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAg
IC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJy
ZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAg
SVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3Nh
Z2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9y
U2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5k
cyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9y
aWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdl
KTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkq
KTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93
ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAg
Ly8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlz
Y29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRh
U3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9y
ZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50Jiwg
UmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9y
ZSYpOwpAQCAtMjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQ
bHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3Ry
aW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQg
Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7
CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nl
c3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVm
YXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAg
IEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVy
biAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAg
ICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpA
QCAtMzI0LDggKzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZv
aWQgZmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtl
TmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsg
bV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1
ZTsgfQpAQCAtMzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3
b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVs
bHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7
IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9v
bCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vz
c1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZv
aWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dz
KSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9
Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQor
ICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNl
cnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0
IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4
ICs0MzQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQog
ICAgIGJvb2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdB
TUVQQUQpCiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNv
cmU6OkV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5l
Y3RlZChjb25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxv
YWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4m
IHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFu
c2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJz
dFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0
eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUlt
bWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDgg
QEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRv
U3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAot
ICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAg
IHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAg
LTUzOCw5ICs1MTAsMTUgQEAgcHVibGljOgogICAgIGludDMyX3QgdXNlcklkKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VySWQ7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwogI2VuZGlm
CiAKIHByaXZhdGU6CkBAIC01NTYsOCArNTM0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNz
UHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQ
cm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAg
ICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRl
RGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94
eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQg
aGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNv
bnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0
YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTU3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNl
c1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNT
aW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3Rh
dGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBw
YXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwot
I2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0
aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CkBAIC02MzAsOSArNTk4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lv
bklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8g
TGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nl
c3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJv
Y2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNo
U2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29s
IG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNl
IH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxX
ZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJv
bGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MTUsNiBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVu
dDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9o
aXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8
V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2
NDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNl
IH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0K
ICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxl
bWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAg
ICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjc4
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsg
dHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0
d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNh
bGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAs
MzEgKzc4MiwxMyBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJv
Y2Vzc0xhdW5jaERpc2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1f
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5k
aWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZj
ZjYwYTI3YTZmNzVkYWVjMzQ5YThmNzJhYjNiODUuLjU0OTJhOWU5ZWM2ZTI4OGUwZmJjOTFkMjU0
OWFlMDliMjJkNmY3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6
OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVw
bHkmJiByZXBseSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUo
cmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTUsOSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hl
ciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3Nh
Z2UoKTsKKyAgICBhdXRvIGVuZHBvaW50TWVzc2FnZSA9IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnhwY0VuZHBvaW50TWVzc2FnZSgpOwogICAgIGlmIChlbmRwb2ludE1lc3Nh
Z2UpCi0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAgICAgICAgeHBjX2Nvbm5l
Y3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2lu
dE1lc3NhZ2UpOwogI2VuZGlmCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbV93ZWJDb25uZWN0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCA3YzQ0MDg1MTY3NzM2
OGI1ZGY4OWE4NmZmNGQzYjUxNTM0YjkwYmI3Li42Mjk3MTA3MWJlOTM4MWY3NzdkYWVkNTk4ZDFi
ZDA2NDE1M2E2NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0y
OCwxMCArMjgsMTIgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBv
cnQgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFu
YWdlci5oIgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2lt
cG9ydCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW1wb3J0ICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KQEAgLTQ0LDYgKzQ2LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjIsNCArNTY1
LDIxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5z
KCkKIH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAg
cmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MoeHBjX29iamVjdF90IGVuZHBvaW50TWVzc2FnZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBtX3Byb2Nlc3NlcykgeworICAgICAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKCFwcm9jZXNzLmNvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlv
biwgZW5kcG9pbnRNZXNzYWdlKTsKKyAgICB9Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXgg
MDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uM2QyOTE1OTA0ZDNlNTc0
MmI4NjcyMjVkYTgzZWVmMTBjMDc3Mzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5o
IgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJ
bml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlv
bkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
IkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBA
IC04MywxMyArODgsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRh
UmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFs
bE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vi
c2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQ
QUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICBy
ZXR1cm4gbWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQorewor
ICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAg
ICAgICBmdW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdl
YnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246
OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1l
cmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpX
ZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25m
aWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxl
Z2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURh
dGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9u
SUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7
CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0g
ICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5
LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3
NSwzMyBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQog
ICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0
byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
YXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRl
RGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25J
RChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMo
KS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFT
dG9yZTo6bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2Vzcykgewor
ICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlKCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24o
KnRoaXMpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vi
c2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9j
ZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFT
dG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0
byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8g
bnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNv
bHZlZERpcmVjdG9yaWVzKQpAQCAtNDQwLDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIE8KICNlbmRpZgogCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVy
c2lzdGVudCgpKTsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NB
Y2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29s
cygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewotICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dp
dGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpMYXVuY2g6CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVCht
X25ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygp
OwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJz
aXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUg
PSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQ
ZXJzaXN0ZW50KCkpOwpAQCAtNzI0LDMxICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRp
bWUKICAgICBib29sIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9
IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQ
ZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2Us
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQ
cm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdl
YlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50
KCkpOwpAQCAtODkzLDE0ICs4OTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlm
ICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3Zl
UGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIg
Kzk5MSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RT
Q2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwg
cHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhv
c3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CkBAIC0xMTgwLDE4ICsxMTc1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNl
Y29uZHMgc2Vjb25kcykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDAp
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyks
IE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKQEAgLTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50
LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQs
IG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5l
VGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEyMTEsOCArMTE5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3Vu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291
bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyMzEsMjAgKzEyMTcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1By
ZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEy
ICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzA3LDEwICsxMjc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzIyLDEyICsxMjg3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzNDEsMTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMzUzLDggKzEzMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzY4LDIyICsxMzI0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM5NywyMyArMTM0NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIg
KzEzNzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYs
MjUgKzE0MDIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVk
RnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRG
cm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE1MDYsNjAgKzE0MjEsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1
Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxs
VGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3Jh
bmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25J
RCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBD
YWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAg
ICAgICBDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291
bnRlZDxMb2NhbENhbGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICAgICAgICAgIDogbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAgICAgfTsKIAotICAgICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtMTU3NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFu
ZGxlcjx2bwogICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFu
ZGxlcjsKICAgICAgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhp
cmRQYXJ0eURhdGE+IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdn
cmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7Cisg
ICAgCisgICAgYXV0byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2Nh
bENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAor
ICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxi
YWNrQWdncmVnYXRvcl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4mJiBkYXRhKSB7CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVz
dWx0KFdURk1vdmUoZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0s
IHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
b29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxl
dGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nl
c3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VI
YXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjQzLDIyICsxNTIxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFz
dFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9t
YWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5k
b21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25J
RCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBs
YXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wg
aXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwg
aXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29s
IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUs
MTggKzE1NTIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
aGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVz
ZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQ
cmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MDQsOCArMTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNl
RXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTcxNiw3ICsxNTc4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlv
bkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTc1NCwxMyArMTYxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNv
bnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0
IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VP
bmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rp
b24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVh
clVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29s
IGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTgwOSwxMCArMTY1Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAgKzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNl
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9y
VGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzgg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRp
b25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRl
ZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShX
ZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JU
ZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTkzMCwxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFi
bGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
OTQxLDIwICsxNzQ4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1l
U2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBm
aXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NzksMTggKzE3NzksMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0
b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk5OCw4ICsxNzkzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRz
LCBDCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxl
bnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlm
CiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAg
cmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBy
ZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNp
dGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4
MjMsNiBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRh
dGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAg
ICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYg
KHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMDg0LDggKzE4NjEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29u
c3QgU3RyaW5nJiBtZWRpYUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZv
KCksIGhvc3QpLCAwKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUo
KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZSgpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3Vt
ZSgpOworfQorCiBib29sIFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpA
QCAtMjE2OSwxNyArMTk2OSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJl
c29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9u
SUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAg
ICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIx
OTEsOCArMTk4OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYg
Y2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIw
MDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9Q
QVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vz
c2VzKENvbXBsZXRpb25IYW5kbAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0g
ICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tp
ZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0g
ICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYg
Y29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAg
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1f
cGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVz
aENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAo
YXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFs
bG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9y
IChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBA
IC0yMzI5LDggKzIwOTEsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0
YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsK
LQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJh
dGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1
LDcgKzIxOTUsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjQ2NSwx
MCArMjIyOCw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29r
aWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjIz
NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0
b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklY
TUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQpAQCAtMjUxOCw3ICsyMjY5LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFi
bGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJp
bmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0Ep
CiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIyODYsMTgg
QEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2lu
SW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhp
cyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVu
YW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0
YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQ
X0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lv
bihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25z
dAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbiht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
QXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21h
aW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTI1ODAsNyArMjMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxl
CiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgp
LmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhz
dG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1ODgsMTAgKzIzMjcsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91bmREb21haW5zRm9y
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTk5LDE2ICsyMzM1LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVu
ZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlk
ZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmlu
ZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGViZjg5MGYzNWJkMDE4MGNkNTFhYWQuLjg0N2VlY2UwM2Vm
YTE1MjMzNTFjNmJhYWNmMTNiMDgyNjdlNjViZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTc1LDYgKzc1
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNs
YXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTEw
OSw3ICsxMTAsMTIgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVE
YXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2
b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9y
ZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzcygp
IGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAg
ICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVy
biAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMTksNiArMTI1LDExIEBA
IHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBw
cm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCB0ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsK
KyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworCiAgICAgYm9vbCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKCkgY29uc3Q7CkBAIC0yMzUsMTUgKzI0Niw4IEBAIHB1YmxpYzoKIAogICAg
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0
dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2ll
cygpOwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CiAKQEAgLTI1MSw2ICsyNTUsMTAg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYm
KTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBD
RW5kcG9pbnRUb1dlYlByb2Nlc3MoeHBjX29iamVjdF90IGVuZHBvaW50TWVzc2FnZSk7CisjZW5k
aWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2Vi
Q29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFByb3h5
U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVNl
dHRpbmdzOyB9CkBAIC0yNzIsOCArMjgwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0K
QEAgLTI4Myw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJv
bGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1
cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRp
ZgpAQCAtMzU5LDcgKzM2Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVk
aWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0
cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsK
QEAgLTM5Nyw4ICs0MDUsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVu
dGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjUsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1
ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6
OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlx
dWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBlMGMwNmUxZGVk
NDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJiNjJkYTZlZTA4
MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC00
Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9wcm94eVNldHRp
bmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
c2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4
ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9z
b3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5
MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBj
NTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8g
UHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNv
IHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29s
LgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdl
YnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1h
cnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURh
dGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFT
dG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2
MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0
ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRm
YTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1F
OiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUg
V2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklY
TUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRl
RGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3Jz
ID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3
b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJv
b2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0
ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vy
cm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0
aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQog
eworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25l
dHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi5mYzM5YzBlOTczYWEz
NWQ4ZmFjMGYwNTEwMDBmZTY5MjlhOGU3NDJhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjAtMDktMjEgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5l
dHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0
ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBl
bmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJl
Y292ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUlu
Zm9VcGdyYWRlVG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRmlsZU5hbWUubW06CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVs
dGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxT
dG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3Zl
cnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5
RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5X
ZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisKIDIwMjAtMDktMjEgIEth
dGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cg
YWJvdXQ6Ymxhbmsgc3ViZnJhbWUgbG9hZHMgZm9yIG5vbiBhcHAtYm91bmQgdG9wIGZyYW1lcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nl
c3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5k
ZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5
YjQ4YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3
LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUp
CiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNz
IHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVx
dWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdv
cmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYw
MTU2MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEyZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAt
ODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1
bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRh
ID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRo
ZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
cHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9y
ZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwog
ICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2Fi
ZGEwMWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFjMTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRk
YWY5MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNr
cG9pbnRzV0FMQXV0b21hdGljYWxseSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIi
XTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVs
ZXRlUmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkRlbGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMx
YTdjYzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVj
b3ZlcnkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3
LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBD
b3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVj
dG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2
MWQ5ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFlZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29u
dHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVz
dEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5j
b25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBO
U1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRl
eFVwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJiOGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAz
ZTBmZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9i
amVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250
ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVl
dC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2Jq
ZWN0U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJM
ICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVBy
b2Nlc3NLaWxsLm1tCmluZGV4IDY4NzQ1MjllYmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZk
NWYuLjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQ
cm9jZXNzS2lsbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpA
QCAtOTIsNyArOTMsNyBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
ICAgICAgICBpZiAoIWtpbGxlZERCUHJvY2VzcyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQp
IHsKICAgICAgICAgICAgIGtpbGxlZERCUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5t
bQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4
MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0K
QEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RT
Y3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZv
aWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBo
YW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2Nd
IGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBy
dW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRW
ZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18w
Il07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lv
bkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwog
ICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVy
c2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2Vk
RGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5
VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJM
LnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNl
IHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGlu
IHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9
IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1
blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVk
OTk2MGVkZTk2MGMwMDFjMjcyYjY1MDM5MzkwMTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0
ODJiY2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2
ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1w
b3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlBlcnNpc3RlbmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBl
Mzc0NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFjNzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1p
bmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBN
YWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2
OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3Mp
CiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQg
aW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1
LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFz
QWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUlu
V2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KaW5kZXggOGVjNjVmMGEzYmE5MzczNmZk
YjRmOWRkZmVmNzVjZTYwMDA1ZmQwZC4uNTEwYjI0ZjU2OWQyMmJkNDBhN2FkYmUyNWVjZmQwZWNm
YzhhYzcyNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCkBAIC0zMiw2
ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5LDggQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5KQogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiQ29udGlu
dWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jl
c3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBTdXNwZW5zaW9uIik7CiAgICAgcnVuVGVzdEFuZENo
ZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2VzcyBBZnRlciBSZXN1bWUiKTsKQEAgLTE1OCw4ICsx
NTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3VzcGVuZEltbWluZW50bHlGb3JUaGlyZFBhcnR5RGF0
YWJhc2VzKQogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVu
VGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24g
aXMgY29tcGxldGVkIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0
MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0
NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05
NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAg
ICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAg
d2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0
aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0
ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBh
dGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVl
Zi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2Fs
U3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVm
ZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJv
Y2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0
U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmll
dywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1
ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJW
aWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tl
eScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAg
LTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3Bl
bmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRp
bnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9
IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJm
MDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3Jr
UHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBA
QCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpw
b29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNF
bnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Mu
c3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7
CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBF
WFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
OkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsK
IH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVu
dERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFk
MjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUx
MDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Q3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2
b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3Jl
KQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNl
OwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0K
aW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRk
YWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3
YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJW
aWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJi
YjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIz
NTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBA
QCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAog
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1By
b2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0
b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURh
dGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0
aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBf
Y29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5T
VVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
b2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQ
YXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVs
dEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcy
LDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRh
U3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1h
bmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZp
bGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5w
YXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxl
RXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAg
IGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRo
Q29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAg
IHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3
MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZh
bHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRv
U3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlm
OGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNl
ckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRv
cHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRN
ZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7Cisg
ICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBh
bGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28g
Q3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1l
OkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUg
X2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJU
Q1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFn
ZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5k
bGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29s
PiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsK
IAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7
CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90
IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vz
c0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBF
WFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2Vi
UHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVT
VChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3
b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBF
Q1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNz
Q291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRh
T2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVk
U2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAg
ICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBz
aXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1Qo
U2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2Vy
dmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFi
b3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2Vy
UHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0
QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtl
cikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwor
ICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUs
IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExv
YWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9m
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwog
CiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Q
cm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisK
ICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0
NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nl
c3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZp
bGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpp
bmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5
NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAg
LTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklY
TUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZp
bGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRG
T1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywg
WWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3Vs
ZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQog
ewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFBy
b2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0
UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29v
a2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1l
bnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVz
c2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFT
Y3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRC
eUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tp
ZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0g
bWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
IH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3Nh
Z2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0
dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29r
aWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNv
b2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsr
KSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxl
cnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2Vi
S2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dl
YlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2Vz
cyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBj
b29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAor
ICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAg
TlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVE
b21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29r
aWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFT
dG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhh
bmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3
ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBs
b2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
W2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVl
Iik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXdd
IGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0
aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJz
aXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFT
dG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFs
c2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIg
Y29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8
IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsg
fSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwot
ICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVs
ZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JN
ZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBi
b29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNl
Y29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0
NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcx
YzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1
LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBA
IFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxp
Z2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBy
dW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUu
LmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZv
aWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFT
dG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9u
LAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0
IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0
TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRh
U3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vi
c2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tX
ZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0
aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAot
ICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBh
ZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9t
RGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNp
dGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0
XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwg
RG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nl
c3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3
ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAt
ODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxT
RShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3Jd
OwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2VkZGI4MjE1NzQ3NWQ4MWYxMjIwZjQ1NmI4NjRjM2Ix
NzEuLjYzMzI2ZjY4NTZiYzYwNTlkYzYzNzlmMmFhNWMwMDUwYTA3ODRhYmQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDYxLDggKzEwNjEsNiBAQCBi
b29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRl
c3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250
ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0
Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmll
clN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsK
IAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzNiw3ICszMTM0
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMo
Ym9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQ
bGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQ
bGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNv
bmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVy
biBjb250ZXh0OwogfQogCg==
</data>
<flag name="commit-queue"
          id="425017"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409345</attachid>
            <date>2020-09-21 19:51:40 -0700</date>
            <delta_ts>2020-09-21 23:42:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921195139.patch</filename>
            <type>text/plain</type>
            <size>329897</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMwNWNmMjgwYmE1ZDMw
YWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBAQCB2b2lkIFdLQ29u
dGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLQXJyYXlSZWYg
YXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRBbGxvd0xp
c3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0NvbnRleHRUZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAg
LTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdL
Q29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVS
ZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCkBA
IC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogfQog
Ci12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
K3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRl
eHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
d2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdl
YnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFi
NmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBX
S19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JU
IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VY
UE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0
aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVm
IGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25E
YXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNp
dGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2M2NTlmNWZh
YTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgzOTNiZmNjYWI5Mzhk
YWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRXYXJt
SW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29tZSBwb2ludCBp
dCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3
b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRl
eHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dElu
dmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJiZmMzOTI3ZWJjLi5i
NzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
QEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3Rv
cmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKCpXZWJLaXQ6OnRv
SW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwogfQogCit2b2lkIFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJ
VFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3Ry
aW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERh
dGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3ODNkMDljMDdlMjgw
M2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDExZjgzMWQyYTZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoVwogCiBX
S19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdL
V2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dl
YnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRl
TmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VY
UE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lk
ICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlz
RXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5ODZjMjQz
ZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2YmJhNTRmZWJlN2Ex
ZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiB9CiAK
LS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQb29sLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0p
OwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2b2lkKV90
ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wp
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAt
IChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0dXJuIF9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIC0g
KHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4ICs1MzgsNiBAQCBz
dGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFz
aE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFn
ZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJv
dmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NzAsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAg
IHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFs
c0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3Bh
Y2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1
MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2QxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25s
b2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJz
aXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRp
bmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNh
bGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRl
U2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7
CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2b2lkKV9wcmVjb25u
ZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQ
TEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMuNCwg
V0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0g
KHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClh
bGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0gKHZv
aWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90KXBp
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJp
bmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFj
ZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0
ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0Q29va2ll
U3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBhcmUgbm8g
bG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAuMywgMTIu
MikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5k
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9u
bHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmdXaXRoRmly
c3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5TVVJMICopdGhpcmRQ
YXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91bGRTY2hlZHVsZU5v
dGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVjYzk5MjMzZWY0ZjBi
OTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2YxNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0
ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogICAg
IH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwor
fQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAg
ICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3MywzMiBAQCBzdGF0
aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRz
KE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6
KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9y
ZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRp
b25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisK
Ky0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0
YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNr
Z3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggOTkzMjAx
MDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3YmEzMjJmYWViOGE0
N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5
ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFT
dG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xk
TmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAq
PiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
Yywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2Nv
bmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5E
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0
ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNv
b2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsK
KyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShkYXRh
TWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgfQorCiAgICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChk
YXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewot
ICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAg
ICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxNDUs
OSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAK
QEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lz
dGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgo
ZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwog
fQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsK
IAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2ll
TWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAK
IC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjksMTEgKzI3MSw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4g
ZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAg
Ly8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZp
cnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwg
U3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tp
ZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJM
KCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tp
ZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQog
ICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29v
a2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBT
b3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZy
b20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8v
IG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewog
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMwNTdkZjUyN2NkZDQ0
NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0g
YWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2Ut
ZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikp
OwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZp
Z3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVy
KFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2lu
ayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1
c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4IEBAIHZvaWQgd2Vi
a2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRF
WFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUpOwogCi0gICAgaWYg
KGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50
cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJv
bVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOCho
b3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMu
aW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRhYjQ3ZmZmNTkxMWVl
YzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZiZjQwODIyYjZkZTg2
OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIsOCBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBP
bmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsx
NDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0gYWN0
aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21h
aW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
aW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThiNTMw
ZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25u
ZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
KCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEyMTUx
MjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5NjY4
MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEgKzQx
LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgor
cHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitw
cml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdL
Q3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2
ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZjYTZhNjQwY2IyZjMx
YzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVu
YWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
aWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkK
QEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAg
IGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNN
b2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlz
U2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlz
TWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwot
I2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6
KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0K
LQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtD
b3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkK
ICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5h
YmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwot
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
ID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDEx
ICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgp
ICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsK
IH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpo
YXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQ
b29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNhbGxiYWNrKCkKIH0K
ICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nlc3NQb29sOjp4cGNF
bmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBvaW50TWVzc2FnZTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpCi17
Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0KLSAgICBmb3IgKGF1
dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9jZXNzLT5zdGF0ZSgp
ICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzcy0+Y29ubmVjdGlv
bigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2Fn
ZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0KLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcy
YzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1By
b2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2Vi
UGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBM
QVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3Qg
VVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3Rv
cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93
bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
IApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxl
bmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9v
bCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7
Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSks
IGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVx
dWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndp
bGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJl
c3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJl
cXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3
UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQ
b29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDAp
OworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHBy
b3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQog
CkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wt
PmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUo
KnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1
Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwg
U3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxs
b3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVE
ZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6
OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFj
ZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcw
ZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkK
KyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9z
aG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUu
bXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcw
LDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBE
b3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAg
aWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9j
ZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVy
Rm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxv
YWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyAr
OTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lE
KCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVk
TmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93
bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPiht
X3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9j
ZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxv
YWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3By
b2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NB
c3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0g
ICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25s
b2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5Lmdl
dCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBA
QCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYg
ZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3du
bG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhv
bGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
KTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93
bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2Fk
SUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFs
aWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1
ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRv
d25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQog
CiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMg
Zm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51
bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEw
ZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkx
ZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8
RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3Nl
cnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjli
OTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgy
MjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkK
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExl
Z2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9j
ZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0
NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0YWJlN2JmYTFlMjEwY2NiODc5MzMxNzMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVk
ZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVu
dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNf
SVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NB
R0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0
aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9j
ZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1By
b2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4g
c2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94
eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAg
ICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0
dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICBpZiAoIXBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1l
dGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVycygpOworICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQoreworICAgIFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBmb3IgKGF1dG8mIHN0
b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoc3Rv
cmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJp
b3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywg
cHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5j
aGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUg
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChw
cm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNoT3B0aW9u
cy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAg
ICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9O
KQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51
c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25s
b2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93
bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
V2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzNyw4IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBj
bGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
bWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMg
d2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29ya1By
b2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
bGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5l
dHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0y
NzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVj
dGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93
bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSAr
NDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBh
Z2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShz
ZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZB
bnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0
aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRh
YmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5
MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hp
bmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1By
b2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkp
Ci0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAg
ICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNv
bm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUs
NyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERv
bWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAg
ICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSArMTMzOCwzMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihS
ZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
YWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3Rv
cmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMo
KSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBz
dG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNz
aW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpo
YXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0
ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAg
bV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAo
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Np
b25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9y
ZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0K
LSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250
ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0
cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
bV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURv
bWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29u
bmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJl
Y29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdl
YlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMg
Ym9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQor
eworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMo
KSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkg
ewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZp
dHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29y
a2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAw
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9v
bCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9v
bEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJv
dHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxl
cigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMp
Il9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNz
RGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5
MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdkODE1NWE0YTU5MTJm
ODlhOWJjODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8
d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3Jt
RGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwog
fQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQ
cm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJv
eHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9E
YXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJl
c291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3
b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJp
dmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3Ry
YWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgs
MTcgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94
eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4g
ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkp
OyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVm
PE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAg
dm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJv
eHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGlu
Z1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxl
dGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgUHJvY2Vz
c1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAg
ICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAg
dm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAgICBib29sIGhhc1Nl
c3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKKyAg
ICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRl
KGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAgLTIyOSw2ICsyMzcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRS
ZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYp
OwpAQCAtMjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1f
Y29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB4
cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRwb2lu
dE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3
UHJvY2VzcygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0
b3JlUGFyYW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVND
SUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmci
X3M7IH0KIApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9u
V2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2ls
bFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwxNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9u
SUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nl
c3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFD
YWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENh
bGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNp
dGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9h
ZFByb3h5TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owog
I2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNl
bmRpZgorCiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9y
SG9sZGluZ0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFu
dCBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAsMTEgQEAgcHJpdmF0
ZToKICAgICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
bmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1f
ZW5kcG9pbnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBt
X3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRl
RGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFn
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5k
ZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uOTFjMTkzMWYyZTY1
Y2YxYzk3N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAg
LTUxLDggKzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVy
OjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VO
YW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VO
YW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZp
Y2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9j
ZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFz
ZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2Fn
ZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBl
dmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5t
X3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAu
LjA4NWU3ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisg
ICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAg
ICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5h
Z2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBw
cm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2Vy
UHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29u
dGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6
OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJv
Y2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFT
U0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdL
Q29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGll
bnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+
IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZl
cnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0
KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFn
ZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkp
OwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlBy
b2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNz
RGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6
OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3Ru
YW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rp
b24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNv
b2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZp
ZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBW
ZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwg
Y29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRV
UkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVz
KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNz
aW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZp
bmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNF
KFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVs
c2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZl
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2Yy
OWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJm
ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJh
eSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBl
ZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENv
b2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBX
ZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFz
cyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2Jq
ZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAg
ICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29s
Kik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJD
b29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdL
Q29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoK
ICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6
OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJv
Y2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3
b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxl
bWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92
ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBA
IC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJz
OwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwog
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0
MGYzZjI0NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5
NTlkYzgzNGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxl
ZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxl
ZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9t
YXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRv
bWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0
aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5
cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50
b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQg
V2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJv
Y2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3Zl
cnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJ
TlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2Vydmlj
ZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3Zl
cnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2Ug
PyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRp
ZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlm
aWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAg
ICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0
LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rl
ck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0
Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBj
dXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2Vi
UGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwg
Y3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dl
YlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVy
IGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlz
TWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5h
dmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlj
a0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAg
ICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAg
ICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0Zy
YW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcK
ICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkg
fHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlz
UmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9k
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5
SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBz
b3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGlt
ZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwg
d2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAw
Miw1OCArOTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRy
aWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
Lm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2Vu
ZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJh
ZTUyNTA5MjUyOS4uOWVkMDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2RlNTkyMDEyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0
MywxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hh
bm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29s
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAi
V2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJH
U19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNf
X1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RF9TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwg
IyNfX1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTIzMiw2ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICBy
ZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9y
KGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29w
eSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBA
IC0yMzksNyArMjQ2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9u
Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3du
bG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBt
X2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9y
ZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBt
X2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZv
cm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBX
ZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9j
b25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9z
Y2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4
NSw3ICsyODgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7
CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFm
dGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclBy
b3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5Pigp
OwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nl
c3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1l
bnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAg
ICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFk
cygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1
dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAg
ICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9N
X1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQp
Ci0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBt
aXN1c2UuCkBAIC00MjEsMTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAg
bV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpD
b25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkK
LXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBz
dGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsK
QEAgLTQzNSw4ICs0MTksNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQo
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwog
I2VuZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxs
S2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRp
Y2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vz
czo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZl
TWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQ
cm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlk
UmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24o
KS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3
NSArNDU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hh
bmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0
b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklY
TUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQg
QVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAg
aWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdh
aXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAg
ICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1
dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlz
KTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0K
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJz
aXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigp
OwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29u
ZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVN
b2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0K
LSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9y
Q3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJl
bnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
I2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1Nl
Y3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JU
QU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRh
dGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20g
QXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBh
cmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAg
IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAg
aWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwot
I2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgp
OwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAh
bV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7
Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUp
IHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRl
TG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlm
Ci0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNh
dGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBh
cHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJl
dmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8m
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5l
dHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0g
bmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAg
ICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3Rh
dGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsK
LSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAg
ICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1h
bnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJP
cmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VR
dW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0Nh
Y2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3Jr
Q2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3Rz
U3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2Fj
aGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0
d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQot
Ci0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0
ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2Vy
dmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VE
aXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBi
b29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0g
ICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlz
SXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlm
Ci0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFu
ZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxh
dGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9j
ZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91
Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0
b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVz
KCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3Mg
YWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBp
dCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURz
TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNz
aW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVE
YXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdv
cmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAg
ICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7
Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkp
OwogCkBAIC03NTEsOSArNDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAo
bV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWlu
YXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNs
aWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRl
bnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJv
eHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYm
IHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vh
a1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29u
bmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVj
dGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3
ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
OiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZv
KTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAx
LDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29s
IFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxz
ZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwor
ICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nl
c3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQ
cm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0g
ICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisg
ICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJv
Y2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAg
ICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNE
dW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1f
cHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9w
cmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURh
dGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JT
ZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdl
YiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2
aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCki
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5w
cm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8g
bmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2Vy
cygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsK
KyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZv
clNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiks
ICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9
IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJv
Y2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIs
ICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRp
bmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vz
c0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJv
Y2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5k
KFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAg
ICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1By
b3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29u
dGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2Vy
dmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VX
b3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNl
cygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3Jr
ZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wt
Pm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNl
ckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclBy
b2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
cmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3Mo
V2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAg
IC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJt
ZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBX
ZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVz
aW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJs
ZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAm
d2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Ms
IFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25B
Y3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwog
ICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRC
dW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgs
OSArODk5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGlu
ZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQu
ZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5k
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMs
NyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdl
Q2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24t
PndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRp
bmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAv
LyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0
IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAg
ICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKLQotICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dl
YnNpdGVEYXRhU3RvcmUuZ2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vi
c2l0ZURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS5wdHIoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsK
QEAgLTEzMjksNyArMTAyNCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsK
ICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0
b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nl
c3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpA
QCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdv
cmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYg
c2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJ
RHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVu
dGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0
YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2Vzcykg
ewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFT
dG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAg
ICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vi
c2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlKQogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQog
ewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bjo6Tm87CiAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBA
IERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVx
dWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJl
IHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAv
LyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAg
aWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwg
PSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0
aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRl
KGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVy
bCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1
ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAg
ICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6
c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2Fk
UHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVk
RmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJz
dFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3du
bG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3Vt
ZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlh
dGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0
ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0
LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAg
ICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25s
b2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsK
IAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJl
c3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBp
bml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHko
ZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYg
KCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
KHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVm
ZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0
YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJv
Y2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNz
UG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdh
cm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAw
OwpAQCAtMTU1OCwxNCArMTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNj
aGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRl
bnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JF
YWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgdXJsU2NoZW1lKQpAQCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hl
bWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJs
U2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9y
ZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxl
cnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2No
ZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCAr
MTI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsKIAogICAg
IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxT
Y2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRv
IG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nl
cygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTY1NSwxNiArMTMzMSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVs
KENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9k
ZWwpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2Rl
bFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1
cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVs
KSwgeyB9LCB7IH0pOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7
IH0sIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVx
dWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiAr
MTM1Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1
cmVOZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsK
LSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFj
a2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5h
dGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIo
SVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2
ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3Rk
Ojpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklE
KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+
dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAg
IFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7
CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFs
bFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVu
ZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxl
IChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAg
IHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2Vycygp
OwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tp
ZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywyMSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVp
bnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM3LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1
cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94
eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5LDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlv
bnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAo
bV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9
JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAg
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29s
IFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBw
cm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAg
ICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZiht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4g
V1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsK
ICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEu
LjdjMjU0ODkwMzY2ODljZjlmYWViODc4MTkwNjc5ZGFmMTExNmEzMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNT
IFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRp
b25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3du
bG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxl
Q2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYp
OwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGll
bnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4
OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAg
V2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5n
ZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBu
b24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlv
bigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMo
Y29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nl
c3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUo
KSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQu
CiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9y
ZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lk
IHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFt
ZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9u
cyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBu
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vz
c0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0Zv
clRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkg
eyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBA
QCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNs
aWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50
JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0
dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRp
c3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQg
d2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdl
YlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hv
dWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVy
biBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAg
dm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQ
cm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVE
YXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lk
IG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lk
IGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkm
Jik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlm
aWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQ
cm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5Jiwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nl
c3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXND
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6
ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2
aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25z
dCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAg
IHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4m
IHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAg
ICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNv
bnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJh
Y2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAg
ICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAK
ICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlH
YW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBn
YW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ3MSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVk
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAg
LTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlk
ZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRp
YyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3Rh
dGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElS
RUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNv
ZGVkVmFsdWUpOwpAQCAtNTM4LDkgKzUxMCwxNSBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCB1c2Vy
SWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgp
IGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOworICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29y
a2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hl
c0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0
b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1Niw4ICs1MzQsNiBAQCBwcml2YXRlOgog
ICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0g
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYp
OwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBo
YW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTgxLDE0ICs1NTcsNiBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcg
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVu
dENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5
RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVn
aXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmlj
YXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5ICs1OTgsOCBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nl
c3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0
IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFr
SGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBz
dGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9u
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50Owog
ICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVu
Y2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNl
ckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYxNSw2IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9h
dXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rv
d25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0
b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
IAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsK
IApAQCAtNjgwLDggKzY0Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJF
bmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAx
NDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0
ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdl
YkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBw
bGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAK
QEAgLTcxNCw4ICs2NzgsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5h
dGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0Uo
U09VUCkKQEAgLTgyMCwzMSArNzgyLDEzIEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9p
c0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAg
Ym9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0
YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKICNlbmRpZgotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50
TWVzc2FnZTsKLSNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkK
LXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNz
YWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5k
ZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uNTQ5MmE5ZTllYzZl
Mjg4ZTBmYmM5MWQyNTQ5YWUwOWIyMmQ2ZjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NU
b2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigq
dGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpAQCAt
OTU1LDkgKzk1NSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmco
UHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0CiAgICAgfQogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhw
Y0VuZHBvaW50TWVzc2FnZSgpOworICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gd2Vic2l0ZURh
dGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CiAgICAgaWYg
KGVuZHBvaW50TWVzc2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNv
bm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOworICAg
ICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCksIGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4
IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmY1ZDBiOTVmOTVkNzkw
YzFhMzczZGU4YmNlODRiM2U1MTFlMTQyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRp
bHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBv
cnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNp
bXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9y
dCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTU2Miw0ICs1NjUsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxl
bWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2Vzcygp
LmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgp
KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2Fn
ZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgeworICAgICAgICBp
ZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5p
bmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFwcm9jZXNzLmNvbm5lY3Rp
b24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBw
cm9jZXNzLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOworICAgICAgICB4cGNfY29ubmVj
dGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAg
ICB9Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIz
OWIzMzc1ZDRjMjA1MDM3ZC4uM2QyOTE1OTA0ZDNlNTc0MmI4NjcyMjVkYTgzZWVmMTBjMDc3Mzg4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgi
CiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3
NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tz
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dl
YnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMTkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQog
ICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1z
dGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZh
dWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vi
c2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byogZGF0YVN0b3Jl
IDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigqZGF0YVN0b3Jl
KTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5v
blBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3Rv
cmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5v
KSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTEx
NSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RG
OjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAg
ICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3Rv
cmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0g
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9u
RGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0
b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJl
bW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0
aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9j
ZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAg
ICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBp
ZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNy
ZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NSwzMyBAQCBib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1
bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVy
V2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0
YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3Rv
cmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKwor
TmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQor
eworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0KKworICAgIHJl
dHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdl
dChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0
YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwx
MiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQ
cm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwog
fQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygx
KTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCkt
PmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lm
TmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQw
LDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgogCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBpZiAobmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAg
ICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0g
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAgICAgc3dp
dGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vz
c1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNo
ZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vi
c2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmZl
dGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vi
c2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vz
c1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtNzI0LDMx
ICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRpZE5vdGlmeU5l
dHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNj
ZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVu
Y2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vz
c2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
ICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
aygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0
YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBhdXRv
IHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0
YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0ICs4OTUsOSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nl
c3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5MSwxMCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAg
ICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAg
ICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJh
YmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lv
bklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5h
bWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29s
XSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsxMTc1LDEy
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtl
ckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JU
ZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAg
LTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0
TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTE5OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVu
ZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rv
d25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNE
b3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMTcsMTMgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEwICsxMjc1
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZh
bGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjg3LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
cHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNDEs
MTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEzMTAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwm
IHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI0LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVS
TCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5NywyMyArMTM0
NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYg
dXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzNzgsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJl
ZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0MjEsNDEg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFs
dWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
bV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25J
RCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnko
bV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91
bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBt
b2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxk
R3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpU
aGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZD
b3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3JlZ2F0b3Io
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgc3RydWN0
IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNrQWdncmVn
YXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAgICB+Q2Fs
bGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU3
NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVjdG9yPFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVzdWx0czsK
ICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0o
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYg
ZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdU
Rk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2NhbENhbGxi
YWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeSht
X3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAgICAgICAg
ICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwogICAg
ICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hv
dWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7
IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tp
bmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2
MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRp
c3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTIxLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBj
b25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50
ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5k
ZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25l
ZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BG
cgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdl
U3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhh
ZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhl
cmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIg
fSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVj
b3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU2Nyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
IGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTc4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4
ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyArMTYxMiw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBV
UkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2
MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwxMCArMTY1
Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAg
KzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21V
UkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5o
YXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
CiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUo
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1f
c2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSht
X3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkzMCwxMCAr
MTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxl
ZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJD
b3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxh
ZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzQ4LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0
byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwm
IGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJz
dFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3NzksMTMgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzkzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2
ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxl
bnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vsc2UK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFT
dG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
KSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQ
b29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0
b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm9jZXNz
UG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94
eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29s
cyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bv
b2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjMsNiBAQCBIYXNoU2V0PFJlZlB0cjxX
ZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGlt
aXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5h
ZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0g
bGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjEsNyBAQCBzdGF0
aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtleURpcmVj
dG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBo
b3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNp
dGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nl
c3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRv
U3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29sIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk2OSwxNSBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJv
b2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNz
YXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQ
cm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
bV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNz
aW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
ZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMTk4OSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNh
bGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRy
dWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBD
b21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Np
b25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7
CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFs
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5kbAogfQog
I2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRp
bmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nv
b2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29u
c3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1v
dmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVu
ZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29v
a2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsK
LX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9u
SUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZs
dXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCks
IDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dz
KSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
cldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNz
aW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1
ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIwOTEsNiBAQCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAog
ICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBl
bmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIxOTUsMTAgQEAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5k
aWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKKyAgICAKICAgICBy
ZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjQ2NSwxMCArMjIyOCw2IEBAIEFQSTo6SFRUUENv
b2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICpt
X2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFp
c1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjIzNSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWls
cykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJv
bSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29t
cGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjY5LDEyIEBA
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6
OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIyODYsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGRO
YW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwg
bmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0Fw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJv
dW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1ODAsNyAr
MjMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1Rv
SVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3Vu
ZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5z
KTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVl
cygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAg
ICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7
CiB9CiAKQEAgLTI1ODgsMTAgKzIzMjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFw
cEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9u
SUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyht
X3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRp
ZgogCkBAIC0yNTk5LDE2ICsyMzM1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRl
QnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50
aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGVi
Zjg5MGYzNWJkMDE4MGNkNTFhYWQuLmY2OTA5ZjlhMzAzNjBjZWRmYjZjNTQ1ZDUwYTkyNGI0YTg2
ZjQ5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d3Rm
L09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQpAQCAtNzUsNiArNzYsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3Mg
U2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3Mg
TmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwog
Y2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcg
KzExMSwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFT
dG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQg
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+
JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29u
c3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFt
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjYsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nl
c3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNSArMjQ3LDggQEAgcHVibGljOgogCiAgICAgRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4g
bV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNz
b2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUo
Y29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7
CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI1NiwxMCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwog
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2Fn
ZSk7CisjZW5kaWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6
Q3VybFByb3h5U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4g
bV9wcm94eVNldHRpbmdzOyB9CkBAIC0yNzIsOCArMjgxLDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0
aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQog
CiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQu
Z2V0KCk7IH0KQEAgLTI4Myw2ICsyOTAsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9y
aWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVy
KCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7
IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwg
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlz
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
IAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlh
bGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFz
aFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3Rh
dGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjYsNyBAQCBwcml2YXRlOgog
ICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJl
ZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykK
ICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0
aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBl
MGMwNmUxZGVkNDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJi
NjJkYTZlZTA4MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwu
Y3BwCkBAIC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1By
b3h5U2V0dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9w
cm94eVNldHRpbmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1By
b3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMw
ZGQ5M2M1M2I4ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
ID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bv
b2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFu
YWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKQEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxl
ZDsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQs
IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4
IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1
Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAg
ICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9y
ZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlBy
b2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBj
dXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQ
b29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+
d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
c291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBh
MWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1
ZTI2ZGVkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlKQogewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25J
RCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vz
c1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0
b3JhZ2VUeXBlKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJm
YmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdm
YzBkOWQ1YTRmYTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAg
IC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3Zl
ZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJv
cnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisg
ICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRo
ZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kg
PSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3Jl
VExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMg
PSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdz
ID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlU
UERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExT
RXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vy
cm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2ln
bm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3Jr
UHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNl
dHRpbmdzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4K
ICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi4yM2U0
ZDEzNmIxMWM3ODM1ZTE0ZWMxZWI0NWQ1MWI3NWU3NjA5OTdjIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjAtMDkt
MjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wg
dG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW9zdCBjaGFuZ2VzIHRvIHRlc3RzIGFyZSBqdXN0IGNhbGxpbmcgYSBmdW5j
dGlvbiBvbiB0aGUgV0tXZWJzaXRlRGF0YVN0b3JlIGluc3RlYWQgb2YgdGhlIFdLUHJvY2Vzc1Bv
b2wKKyAgICAgICAgYmVjYXVzZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3
b3JrIHByb2Nlc3MgYW5kIGl0IGhhcyBhIG5ldyBvd25lci4KKyAgICAgICAgRXhjZXB0aW9ucyBh
cmUgbm90ZWQgaW5saW5lLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQv
TmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0
ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9W
Mi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRh
dGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3Rl
bnREYXRhU3RvcmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbi5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyB0ZXN0
IHdhcyBtYWtpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUsIGdldHRpbmcgaXRzIHJlc291cmNlIGxv
YWQgc3RhdGlzdGljcyBkaXJlY3RvcnksCisgICAgICAgIHB1dHRpbmcgdGhpbmdzIGluIHRoYXQg
ZGlyZWN0b3J5LCB0aGVuIHN0YXJ0aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIG1ha2luZyBz
dXJlIGV2ZXJ5dGhpbmcKKyAgICAgICAgd29ya3Mgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5ldHdv
cmsgcHJvY2Vzcy4gIE5vdywgbmV0d29yayBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMg
d2hlbiBhCisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBpbnN0YW50aWF0ZWQsIHNvIHdl
IG5lZWQgdG8gcHV0IHRoaW5ncyB0aGVyZSBiZWZvcmUgaW5zdGFudGlhdGluZyBhIFdLV2Vic2l0
ZURhdGFTdG9yZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgQmVmb3JlIHRoaXMgY2hhbmdlLCBlYWNoIFdL
UHJvY2Vzc1Bvb2wgaGFkIGl0cyBvd24gbmV0d29yayBwcm9jZXNzLCB3aGljaCBob2xkcyB0aGUg
c2VydmljZSB3b3JrZXIgcmVnaXN0cnkKKyAgICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
cyB1c2VkIHdpdGggdGhhdCBwcm9jZXNzIHBvb2wuICBOb3csIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
c3RpbGwgbmVlZHMgdG8gaGF2ZSBhIHNlcnZpY2UKKyAgICAgICAgd29ya2VyIHJlZ2lzdHJ5IGlu
IGl0LCBidXQgd2hlbiB3ZSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGl0IGxvb2tpbmcgZm9yIGEg
d2ViIHByb2Nlc3MgdG8gcnVuIHRoZSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciwgd2UgZ28gYXJi
aXRyYXJpbHkgdG8gdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0aGF0IGhhcyBhIHByb2Nlc3Mgd2Ug
Y2FuIHVzZS4gIFRoaXMgbG9naWMgaXMgaW4gCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MuICBCZWNhdXNlIHdl
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIGVhY2gKKyAgICAgICAgdGltZSwgc2V0dGluZyB0
aGUgY3VzdG9tIHVzZXIgYWdlbnQgdG8gdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gdHdvIGRpZmZl
cmVudCBwcm9jZXNzIHBvb2xzIGNhdXNlcyBvbmx5IG9uZQorICAgICAgICB0byBiZSB1c2VkLiAg
VGhpcyBpcyBub3QgYSBwcm9ibGVtIGluIHByYWN0aWNlLCB0aG91Z2gsIGJlY2F1c2UgdGhlIG9u
bHkgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBTUEkgdG8KKyAgICAgICAgc2V0IGEgc2Vydmlj
ZSB3b3JrZXIncyBjdXN0b20gdXNlciBhZ2VudCBpcyBTYWZhcmksIHdoaWNoIG9ubHkgaGFzIG9u
ZSBwcm9jZXNzIHBvb2wuICBUaGlzIHRlc3Qgc3RpbGwgdmVyaWZpZXMKKyAgICAgICAgdGhhdCBh
IHVzZXIgYWdlaW50IGlzIGNvcnJlY3RseSBzZW50LgorICAgICAgICBTaW1pbGFybHksIHRoZSB0
ZXN0cyB0aGF0IGNvdW50IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3NlcyBlaXRoZXIgaGF2ZSBkaWZm
ZXJlbnQgcmVzdWx0cyBvciBuZWVkIHRvIGJlIHJ1biB3aXRoCisgICAgICAgIG9uZSBwcm9jZXNz
IHBvb2wgcGVyIHBhcmVudCBwcm9jZXNzLiAgVG8ga2VlcCB0aGUgcmVzdWx0cyB0aGUgc2FtZSwg
SSBzZXBhcmF0ZWQgdGhlIHRlc3RzIGludG8gZGlmZmVyZW50CisgICAgICAgIFRFU1QoU2Vydmlj
ZVdvcmtlcnMsIC4uLikgbWFjcm9zIHdoaWNoIGFyZSBydW4gaW4gc2VwYXJhdGUgcGFyZW50IHBy
b2Nlc3Nlcy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRU
UENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZy
YW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAg
VGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29r
IGEgdGVzdCB0aGF0IHdhcyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQg
TlNIVFRQQ29va2llU3RvcmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBp
dCBmbGFreSBub3doZXJlIChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQg
Y29ycmVjdGx5IGhhbmRsZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAg
ICAgIGJlZm9yZSB0aGlzIGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0
IGluZnJhc3RydWN0dXJlIGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3Rh
dGljIHZhcmlhYmxlcyBmb3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUFkanVzdENvbnRleHQpOgorICAgICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nIGlzIG5vdCBuZWVkZWQsIHNvIEkgcmVtb3Zl
ZCBpdC4KKyAgICAgICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUgaXNuJ3Qg
bmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgV0tDb250ZXh0UmVmIChXZWJQcm9jZXNzUG9vbCkgZG9l
c24ndAorICAgICAgICBvd24gYSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUsIHNvIGl0IGRvZXNu
J3QgY2FyZSB3aGljaCBpcyB0aGUgZGVmYXVsdCBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBJ
biBmYWN0LCB0aGUgImRlZmF1bHQiIFdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgcmVhbGx5IGltcG9y
dGFudCBpbiB0aGUgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLgorCiAyMDIwLTA5LTIxICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFi
b3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4
IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0
OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4
IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQog
CiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBz
byB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVl
c3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3Jr
IHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1
NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4
OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5z
aWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9
IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUg
RG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnBy
b2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVn
cm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29s
IF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9d
OwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAg
ICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRh
MDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFm
OTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Vz
ZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3Bv
aW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0
ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3
Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292
ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVs
ZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVy
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3
ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJD
b250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBu
YW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29w
eSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3Rv
cnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0K
aW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFk
OWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVT
VChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RI
YW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29u
c2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNV
UkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhV
cGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2Uw
ZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVu
dENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJh
dGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQu
aD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVj
dFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAq
dXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9j
ZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVm
Li43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAg
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAg
ICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7
CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMyLi42
ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tV
c2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3IEBA
IFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFt
ZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRhNWY3
Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2OTY3
YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcgKzc4
LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZpZXcg
PSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRl
c3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhp
cmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRX
ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFydHkg
SURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNzLgog
ICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAg
c2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhp
cmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFi
YXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCmlu
ZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIyNGY1Njlk
MjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5k
SW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRF
U1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lv
biIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIg
UmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93
ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNy
ZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVj
a1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5MmFlYjJm
Li5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6
ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2VzcyB0byBr
ZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVF
eGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0cjxOU0Rp
Y3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmls
XTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2RhZTQzZWMy
MDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRhMjY2ZmY5
YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVTVChXS1dl
YlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJz
ZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIsNyAr
MTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAg
RVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0g
ICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGlu
dWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93Lmxv
Y2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6
XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExv
Y2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29sLmdldCgp
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBmODgwMjVk
MDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkwYjBlYjhl
NDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBv
cnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0
aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9y
Lmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzRW50aXRs
ZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSk7
CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07
Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nl
c3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJL
aXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUgPSBb
d2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wgaGFzRW50
aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
OkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsK
ICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgRVhQRUNU
X1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFzRW50aXRs
ZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAgIEVYUEVD
VF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAi
dGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJlcikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0
b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4ZjcuLjJm
OGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBl
cnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQpAQCAt
NzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNp
dGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1w
bGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2
NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0YmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVT
VChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdOZXR3b3Jr
UHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdD
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2Vi
Vmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQppbmRl
eCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIzMWE5M2Iz
ZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3
b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3
NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFy
dCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1Qo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNj
ZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVS
TCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9j
ZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5h
Z2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRh
U3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBS
b290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0Rmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAg
ICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJv
b3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBF
Q1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5w
YXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJM
LnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtk
ZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAg
IF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9u
ID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlv
bl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpAQCAt
MTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0b3JlU3Vz
cGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25d
OwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7
CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAg
ICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAg
W2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZh
Y2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxT
Y2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4YjliMGU5
ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRiMmFkY2Ex
YmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3IEBAIFRF
U1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAg
ICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFs
bG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBD
dXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNl
ckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVz
c2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVz
c2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMsNiBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAg
ICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107
Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQv
aHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4MCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29u
ZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBS
ZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUsNyAr
MTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0
aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4K
LSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291
bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1
cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAg
LTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9j
ZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBk
b25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFnZSBk
aWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdldCgp
Ll9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vic2l0
ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJz
aXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRp
b25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtMTYxOCwy
MSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5n
UHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29y
a2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgx
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMs
IEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1U
RVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdo
U2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3Jl
TmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wg
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExv
YWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdv
cmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFi
b3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZv
cmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91
dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAot
ICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcu
Z2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFlY2RlZWVl
NmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3OSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29r
aWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
SFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wgZmluaXNo
ZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVz
aW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1
bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1QoV0tIVFRQ
Q29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAgIHJ1bldL
SFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNl
IENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgor
LSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBF
Q1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3Ry
aW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UK
K3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCist
IChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFy
IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkg
PCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7
IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsK
K30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdz
KQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10g
YXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6
QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNv
b2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNI
VFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9u
Q29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwK
KyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAg
ICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNz
aW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9u
ZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2ll
SFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIg
PSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7
CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29v
a2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02
MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29s
RXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVk
KTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tp
ZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsn
KTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ld
ID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9p
bignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENv
b2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NU
UkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVW
YWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpm
aXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtz
Lm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUuLmFjMTY1
MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVI
YW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtzMykKIAog
ICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTViOWQxNDU0
NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhiNTkxZmNh
YTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpAQCAtMjQ0
LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhT
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3aXRoIGJy
YW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1c3RvbSBj
b29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBOZXR3b3Jr
UHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdvcmsgYXMg
ZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0byBuZXdD
dXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7
CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1Nl
dCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29tcGxldGlv
bkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRzKSB7CkBA
IC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBh
dGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNlaXZlZFNj
cmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
bmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbTlNTZXQg
c2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlmaWVkU2lu
Y2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01MzksNyAr
NTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3JlQWZ0ZXJU
ZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
cmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFD
YWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAg
W1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQ
YXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRiODIxNTc0
NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJhYTVjMDA1
MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApA
QCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29u
c2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0
UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250
ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZh
bHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgp
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpA
QCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409349</attachid>
            <date>2020-09-21 23:42:41 -0700</date>
            <delta_ts>2020-09-21 23:59:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921234240.patch</filename>
            <type>text/plain</type>
            <size>339936</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjM3YmFhNjhmOTI0Yjk1ODcyZjAxZjdlNGE4
MGQ1ZjQ5N2Q1ZmU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0Nv
bnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVm
IGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dM
aXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9
CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFp
blJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJy
YXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
QEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJT
dGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9
CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwo
d2Vic2l0ZURhdGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuaAppbmRleCAxZDhmYWI4YTE0ODZhYWRiNDk0MTQ0Yjk4ZjEwZTkzNjM4ZDBjNWU2Li4y
YWI2ZWY4NmY1MzBlNzdmNzRjYmQ1ZGY1ODYyYWM0ZDMwYjc5ODc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaApAQCAtMTY4LDcgKzE2OCw2IEBAIFdLX0VYUE9S
VCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IFdLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExB
Q0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwogCiBXS19FWFBP
UlQgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRI
X1JFUExBQ0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwotV0tf
RVhQT1JUIFdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIFdLR2VvbG9j
YXRpb25NYW5hZ2VyUmVmIFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tJY29uRGF0YWJhc2VSZWYgV0tDb250ZXh0R2V0SWNv
bkRhdGFiYXNlKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0tleVZhbHVlU3Rv
cmFnZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGEwMjUwMTFmNzBjYzY1OWY1
ZmFhMDhhN2Q2Y2JiM2ZmNTZlZTZhMzguLjQ4YTI5YzQ1NjhhYjY3YjNiN2UxZWY5ODE1NmY2ZWZh
ODk2YjFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFdh
cm1Jbml0aWFsUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAvLyBBdCBzb21lIHBvaW50
IGl0IHNob3VsZCBiZSByZW1vdmVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYpOwogCi1XS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5cGVkZWYgdm9pZCAoKldLQ29u
dGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0
SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKTsKICAgICAKQEAg
LTk3LDggKzk0LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChX
S0NvbnRleHRSZWYsIFdLQXJyYXlSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLVVJMUmVmIHNlcnZlclVSTCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCk7Ci0KIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tTdHJpbmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVU
eXBlcywgV0tBcnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENs
ZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDY0OGYzMDA5NjFhNTA2MGM5Y2RmMDNl
M2NmODA0NThiZjJiYjUwZGQuLmI0NDczNDIxMjAwNjEzYzE5ZWMzYWM5YWQ2Njk5NzUzNGFiZWYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYg
KzM5OCwxMSBAQCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFn
ZSkKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFn
ZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgp
KTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdl
UmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0NTRh
MmI3ZWRmZDIyMzJhYWU5NTFjNDY3ZDA4My4uYzUxYjgxNjJjODk3MzRhYjE1MmJlZjBlOTkyMzM3
ZDU1ZjJkZThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTEx
OCw2ICsxMTgsOCBAQCBXS19FWFBPUlQgZG91YmxlIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNz
KFdLUGFnZVJlZiBwYWdlKTsKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRy
ZWVTaXplKFdLUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQT1JU
IFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAKIFdL
X0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuY3BwCmluZGV4IDlkZGE1OTFjOTUxODlhYjBjMjVhYzU1NDY2YzBhMmJmYzM5Mjdl
YmMuLjY4NjExNGFhNWVkMGExMzE1ZTVhOWQ2MTk1MWI4ODAyYzc1ZjhhYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRl
ICJBUElIVFRQQ29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3Vy
YXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiks
IHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQorewor
ICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7
Cit9CisKK1dLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlm
aWVyKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
N2RhN2NjNTUzZmQ5ZmUzOGEwMDczYjdkYjg3OTA3MTMwN2FjMTFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTUwLDYgKzUwLDExIEBAIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXCiAKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7
CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JUIFdLUHJvY2Vz
c0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0
YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0
b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVT
dGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0
aW9uQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tCmluZGV4IGZmMzA5NDk4NmMyNDNkMDQ3NGYyNTJkMzkxZTZjY2I3NGYx
ZmVkNWIuLmU3ZjhhZDQwYWU2NGE2YzIxNzY4ZWQzMmM2NTlmNjkzODNjYjAwMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBA
IC00MDYsMjggKzQwNiw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRv
RGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQ
b29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3By
b2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
CiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM1
LDEyICs0MTMsNyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rp
b25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogCiAtICh2b2lkKV9zZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09MKXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90
KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAg
LTU2MCwxOCArNTMzLDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9E
aWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bv
b2wtPnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCi0t
ICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKLXsKLSAg
ICBfcHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Ci19
Ci0KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjoo
Qk9PTClhbGxvd3MKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQ
b29sLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsK
LSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKGlkIDxfV0tHZW9sb2Nh
dGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPilfY29yZUxvY2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYw
NCwxMSArNTY1LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0
aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICB9KTsKIH0KIAotLSAo
Qk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICop
ZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFy
UGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNw
YWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVu
dENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShw
cm90ZWN0aW9uU3BhY2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKaW5kZXggNjc2OTAxNWUwODU1ODk5NGNk
OGEyMTlhMTdhOWM2OGFkZTNiNTM4My4uOTI4NjQ4MThlZDA0MTk5YmMzNGU4MWQ2MDE1NzM4ODgy
NWRhZmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3LDE0ICs4Nyw5IEBACiAtIChfV0tEb3du
bG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHdlYnNp
dGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAgcGF0aDooTlNTdHJp
bmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0
IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29udGVudCBwcm9jZXNz
ZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
IC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCi0tIChwaWRfdClfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkp
OwogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBAIC0xMjIsMTMgKzEx
NywxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAyOThkOWNlYzll
ODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li5kZTZkNWU2Mjg4N2I2NTRjNzQ2MDg4M2Fm
OGYzZTcyMDkzNjc1MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcsMTEgQEAgc3Rh
dGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3Jk
cyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAg
ICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsK
QEAgLTY2OCw0ICs2NzMsMzcgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVj
b3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNlbmRpZgogfQog
CistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJzaXRlRGF0YVN0
b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30K
KworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Cit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFj
a2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBpZF90KV9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVm
NC4uODVmZDk5ODZlMjg2NmZmMzc4NjlmMmRjNzg1NTc5MTg0NGIzMWYzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNV
SW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9y
ZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFP
ZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5k
Oih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRf
dClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5E
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0
ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNv
b2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsK
KyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShkYXRh
TWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgfQorCiAgICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChk
YXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewot
ICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAg
ICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxNDUs
OSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAK
QEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lz
dGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgo
ZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwog
fQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsK
IAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2ll
TWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAK
IC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjksMTEgKzI3MSw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4g
ZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAg
Ly8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZp
cnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwg
U3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tp
ZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJM
KCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tp
ZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQog
ICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29v
a2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBT
b3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZy
b20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8v
IG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewog
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMwNTdkZjUyN2NkZDQ0
NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0g
YWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2Ut
ZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikp
OwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZp
Z3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVy
KFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2lu
ayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1
c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4IEBAIHZvaWQgd2Vi
a2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRF
WFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUpOwogCi0gICAgaWYg
KGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50
cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJv
bVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOCho
b3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMu
aW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRhYjQ3ZmZmNTkxMWVl
YzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZiZjQwODIyYjZkZTg2
OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIsOCBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBP
bmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsx
NDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0gYWN0
aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21h
aW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
aW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThiNTMw
ZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25u
ZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
KCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEyMTUx
MjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5NjY4
MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEgKzQx
LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgor
cHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitw
cml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdL
Q3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2
ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZjYTZhNjQwY2IyZjMx
YzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVu
YWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
aWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkK
QEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAg
IGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNN
b2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlz
U2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlz
TWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwot
I2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6
KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0K
LQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtD
b3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkK
ICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5h
YmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwot
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
ID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDEx
ICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgp
ICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsK
IH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpo
YXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQ
b29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNhbGxiYWNrKCkKIH0K
ICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nlc3NQb29sOjp4cGNF
bmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBvaW50TWVzc2FnZTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpCi17
Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0KLSAgICBmb3IgKGF1
dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9jZXNzLT5zdGF0ZSgp
ICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzcy0+Y29ubmVjdGlv
bigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2Fn
ZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0KLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcy
YzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1By
b2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2Vi
UGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBM
QVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3Qg
VVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3Rv
cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93
bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
IApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxl
bmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9v
bCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7
Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSks
IGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVx
dWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndp
bGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJl
c3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJl
cXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3
UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQ
b29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDAp
OworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHBy
b3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQog
CkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wt
PmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUo
KnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1
Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwg
U3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxs
b3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVE
ZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6
OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFj
ZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcw
ZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkK
KyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9z
aG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUu
bXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcw
LDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBE
b3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAg
aWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9j
ZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVy
Rm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxv
YWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyAr
OTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lE
KCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVk
TmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93
bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPiht
X3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9j
ZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxv
YWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3By
b2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NB
c3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0g
ICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25s
b2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5Lmdl
dCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBA
QCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYg
ZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3du
bG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhv
bGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
KTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93
bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2Fk
SUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFs
aWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1
ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRv
d25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQog
CiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMg
Zm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51
bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEw
ZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkx
ZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8
RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3Nl
cnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjli
OTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgy
MjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkK
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExl
Z2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9j
ZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0
NDY3NWU3ODI1MTY3MTIxZi4uYzAxOThiZjViNjk1ZDc3NDExMjFmNDVkMzlkZTdmMjBkYTk0OTRj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVk
ZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVu
dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNf
SVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NB
R0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0
aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9j
ZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1By
b2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4g
c2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94
eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAg
ICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0
dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICBpZiAoIXBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1l
dGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVycygpOworICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQoreworICAgIFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBmb3IgKGF1dG8mIHN0
b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoc3Rv
cmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJp
b3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywg
cHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5j
aGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUg
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChw
cm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNoT3B0aW9u
cy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAg
ICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9O
KQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51
c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25s
b2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93
bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
V2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzNywxMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAg
Y2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNz
IG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlz
IHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1f
d2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNh
bGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNjEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQ
cm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCAr
Mzc0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJv
Y2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQ
cm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDI5LDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChw
YWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9u
SUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vz
c2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
c2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSAr
NDg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJv
Y2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3ND
cmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAg
ICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5
Myw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSArMTM0MSwzMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0
b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwog
CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAw
KTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5w
YXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQo
KTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+
cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxp
bmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgp
KTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNz
aW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFT
dG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJz
aXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2Vu
ZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ry
b3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgp
IH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJz
aXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7
Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygp
KSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53
ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVE
b21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7
cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlv
bk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBA
IC0xNTAwLDE2ICsxNTc1LDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVj
dFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBh
bnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAg
ICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQog
ewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewor
ICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAg
ICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdl
YlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBm
b3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1
ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdkODE1NWE0YTU5MTJmODlhOWJj
ODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09T
T2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJl
ZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAt
NzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsK
IGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBj
bGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwog
c3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNl
TG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQ
cm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTcgQEAg
cHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQ
cm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVs
dE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0
ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90
dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lk
IHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBh
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAgICBib29sIGhhc1Nlc3Npb24o
UEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKKyAgICB2b2lk
IHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0
IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAgLTIyOSw2ICsyMzcsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAt
MjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBj
bGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1fY29va2ll
TWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB4cGNfb2Jq
ZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRwb2ludE1lc3Nh
Z2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vz
cygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFy
YW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRl
cmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0K
IApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9w
ZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXRE
b3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQ
Qzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwxNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJl
ZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29s
JiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFj
a3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBt
X3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNr
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9hZFByb3h5
TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogI2lmIEVO
QUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNlbmRpZgor
CiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9ySG9sZGlu
Z0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFudCBtX2Fj
dGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAsMTEgQEAgcHJpdmF0ZToKICAg
ICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29y
a1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9p
bnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Np
b25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0
b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhk
YWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uOTFjMTkzMWYyZTY1Y2YxYzk3
N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDgg
KzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5k
bGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09
IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2
ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Nv
bnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUp
IHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsK
KyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNp
dGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQ
Q0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLjA4NWU3
ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVN
YW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBt
X25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1
cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNz
UG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHko
cHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5h
Z2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1
cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nl
c3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldl
YkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVCht
X2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2ll
TWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwog
fQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2Vy
dmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAg
ICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChh
dXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0
cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQot
Ci12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQ
cm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xv
c2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigp
OwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxl
bWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBw
cm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklE
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lv
bklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxs
VGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNz
aW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8
Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2ll
cyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVz
KHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxD
b29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQp
LCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENv
b2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVAp
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2YyOWMwOWQ1
MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJmZWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApA
QCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFy
cmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXND
YWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250
ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0
aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7Cisg
ICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVN
YW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1h
bmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2ll
TWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoKICAgICB1
c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdl
clByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdv
cmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Np
b25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bv
b2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9j
ZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBAIC0xMjUs
NiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJzOwogCisg
ICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0MGYzZjI0
NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5NTlkYzgz
NGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0
b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwot
ICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9u
KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwg
MCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBA
IC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJv
dW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2Vzcygp
CiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVu
dGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3Jr
ZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYm
ICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUo
KSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBy
ZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigp
LCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgp
Lm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCks
IHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2Up
CkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZv
ckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAg
ICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgp
IH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdp
bi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhy
ZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5k
aWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50
RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlE
KTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVu
dERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJ
RCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRp
b24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJp
YnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAg
ICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2
aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBp
ZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFy
Z2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJl
Y3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlh
dGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VV
UkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93
KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90
ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAwMiw1OCAr
OTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJl
ZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0g
ZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFs
dWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5n
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
ZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAj
aWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJhZTUyNTA5
MjUyOS4uNzFmMWY2MzhkYzMzZjRlNDE4MjU2ZDY2ODFjZjg0NGY4MmI5NDFjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDUsNyArNDUsNiBAQAog
I2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlhbGl6
YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNF
X0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwg
IyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1Io
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlBy
b2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9M
T0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAg
LSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCks
IGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMzLDEx
IEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xv
YmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9y
PFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNz
UG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6
IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBh
Z2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0NSw2IEBAIFdlYlBy
b2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJl
ZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlx
dWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3Jl
YXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGlj
c1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1w
bGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjcyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2Vu
ZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2
YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5
c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg3LDYgQEAgV2ViUHJvY2Vz
c1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25m
aWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ug
c3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1h
cC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRk
U3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVt
ZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VT
U0lPTikKQEAgLTM0Miw5ICszNDMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blBy
b2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2lu
Z0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRv
bigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0
MDAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGll
bnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAg
IGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MDks
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3Vz
dG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3Vh
Z2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bv
b2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZl
cnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyAr
NDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5n
ZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1Nyw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRz
LgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5n
IHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkp
IHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0
YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VS
ZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAq
bV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFr
ZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
bmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nv
b2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2ll
cygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5z
b3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNl
QXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25m
aWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQo
c2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgp
OwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMu
cGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBv
cmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRl
bXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUo
KSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nl
c3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUg
ZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0
IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0v
MTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRl
U3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwot
ICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAg
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFn
ZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0
b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/
IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5n
KCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZN
b3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1l
dGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnks
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9v
bCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUg
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxp
Y2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFw
cEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5j
ZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVE
YXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNl
dCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZl
cmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAg
fSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJ
dHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5p
c0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRp
ZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAg
ICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2Rl
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7
Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9u
ZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJv
dW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVh
bFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90
YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
KCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAg
ICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURl
YnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAg
ICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0
YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAg
ICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0
byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNU
U1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5p
c051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3Rz
U3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FM
VEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAg
ICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZl
U2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5h
YmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRs
eVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
ID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwK
LSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAg
ICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
LAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291
cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRl
cnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQot
ICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vz
c0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRp
ZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRk
U2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1h
a2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMg
dGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1
dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05v
bkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAg
ICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJu
ICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsK
LSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vz
c1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBw
bGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJv
Y2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2Nyw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAg
ICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUg
dGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUg
Y2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQog
CkBAIC03NjQsMjAgKzQ3Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQ
cm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwg
cmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlk
KGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtU
aGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJv
Y2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQs
IHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQ
cm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hl
ZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2Vi
UHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lz
dHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsK
KyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3Rv
cmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAg
ICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwot
ICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAg
IH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBo
b3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0g
cHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlBy
b2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBp
ZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0g
bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKwor
ICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAg
ICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9j
ZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0
YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjcsMzUgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1
c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhw
cm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3Jr
ZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExP
V0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwg
UElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdv
cmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5n
IHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlBy
b2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0
cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vz
c1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vz
c1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7
CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2Vy
IHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHks
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAg
ICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFT
dG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94
eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJv
Y2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJv
Y2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFT
U0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
Y29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUo
KSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNO
dWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
UHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnBy
ZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChw
cm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFp
bnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vz
cyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNz
KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNl
bmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcg
QnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQg
dXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAv
LyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRl
RGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9y
ZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAg
aWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAK
QEAgLTEwMzIsOCArNzM0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dl
YlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJv
Y2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRp
YWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQ
YXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OCw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVz
dGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhp
cywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4g
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVm
PEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsK
ICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3Rv
cmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0
dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3Rv
cmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsK
KyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAg
IFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjMsNyBAQCBS
ZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50
JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBp
ZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtl
clByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
ICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nl
c3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdv
cmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9
CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MCw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2Vy
QWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1
c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
c2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5z
ZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAj
ZW5kaWYKQEAgLTEzNjUsMTUgKzEwNTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVn
aW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewog
ICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vz
c2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdF
bnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAg
ICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFy
YW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklE
KTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRh
dGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0
MDEsNyArMTA4Niw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRl
RGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdl
YlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBh
Z2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFBy
b3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQ
YWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNz
aW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0Fw
cEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0
aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NSwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9j
ZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJv
eAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1
ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBv
ZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0
b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewot
ICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlh
dGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNF
cXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChp
bml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFs
c2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBk
YXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAg
IHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVz
dChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBi
ZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBX
ZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5p
dGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJM
IHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7
CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21h
aW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRp
YXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlm
ICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2Vy
QWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQ
YWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNl
c3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlz
QXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQ
cm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gK
IERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQ
STo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRv
d25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1
ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAg
IH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2Fk
UHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQog
CkBAIC0xNTE3LDExICsxMTkzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdp
bnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJ
RCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1
cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVy
KCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJt
ZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMjksMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1
cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1Nl
Y3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxT
Y2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
KTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2No
ZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3Vy
bFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAw
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1Nzgs
MTQgKzEyNTMsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7
Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVy
bFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAt
MTYwNiwxMCArMTI4NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29s
KHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0
aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzAsMTggQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dElu
dGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFT
dG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
KnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBA
IC0xNzUwLDMwICsxNDIyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBs
ZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1l
bW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3Nh
Z2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
U3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDAp
OwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5h
dGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nl
c3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQyOSwxNSBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkK
ICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQot
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NE
aWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdp
bigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdl
YlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRv
bWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2Vi
Q29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRp
ZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2Vz
OworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7
Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9j
ZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25N
YWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNh
bGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJv
Y2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7
CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNiw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2Vy
dmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZp
Y2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBb
cGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVy
biBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNl
bmRpZgpAQCAtMjMyOSwxNCArMTk1OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3Vy
cmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVM
b2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21h
aW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlE
LCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWlu
LCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50
ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOCwyNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChz
X3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6
ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhT
ZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vz
cykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10o
YXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2Vy
Rm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlBy
b2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNz
Lmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYxZmU5
NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi43YzI1NDg5MDM2Njg5Y2Y5ZmFlYjg3
ODE5MDY3OWRhZjExMTZhMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZlcjsK
IAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBIVFRQ
Q29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsxNzks
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25sb2Fk
Q2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNldEF1
dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7
Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQg
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYp
OwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAgLy8g
bnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVtbXlQ
cm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBtX2R1
bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdlYlBy
b2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nl
c3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpDb25u
ZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihj
b25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUgbWVz
c2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3Ig
Y3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNz
YWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQogICAg
IHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAogICAg
IFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9jZXNz
Q2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29u
bmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFBy
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUq
IHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAg
ICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6
UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAt
MjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4oU3Ry
aW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYmIG1p
bWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJTdXBw
b3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgdm9p
ZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBuZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAogICAg
IFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBhZ2VH
cm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVn
YWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0
b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9j
bGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWdu
ZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0LDgg
KzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
OwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hD
b29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpAQCAt
Mzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nl
c3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0g
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBt
X25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZp
Y2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7
Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9v
bCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVy
biBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVf
dCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFs
PFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50
Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtl
ckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wg
c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
VGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAg
ICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50
TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25z
dCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVh
ckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWlu
LCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6Rmxh
Zz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAg
ICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NG
b3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9t
YWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwg
Ym9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVibGlj
OgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92
aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQg
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90
aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTUzOCw5ICs1
MTAsMTUgQEAgcHVibGljOgogICAgIGludDMyX3QgdXNlcklkKCkgY29uc3QgeyByZXR1cm4gbV91
c2VySWQ7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmpl
Y3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwogI2VuZGlmCiAKIHByaXZh
dGU6CkBAIC01NTYsOCArNTM0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNy
ZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQ
cmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBp
bml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3Jl
KiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJE
YXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7
CiAKQEAgLTU4MSwxNCArNTU3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdl
YlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQ
cm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmlu
ZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2
ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02
MzAsOSArNTk4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFr
UHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWln
aHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlBy
b2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGlu
Z0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAg
U3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJl
bmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2Vy
Q29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9y
U2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MTUsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xp
ZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21h
dGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2NDYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAg
ZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0
ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250
ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjc4LDYgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9Owog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nl
c3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4g
bV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAsMzEgKzc4Miwx
MyBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5j
aERpc2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9T
T2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNz
YWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZm
NzVkYWVjMzQ5YThmNzJhYjNiODUuLjFmZmVkM2QxYmY1ZDRjYTc3ZTdlNTFiMDIyNWNmOTMzOWZi
NGFlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApA
QCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRo
aXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCkBAIC05NTUsOSArOTU1LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3QK
ICAgICB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBhdXRvIGVuZHBvaW50TWVzc2FnZSA9
IHByb2Nlc3NQb29sKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CisgICAgYXV0byBlbmRwb2ludE1l
c3NhZ2UgPSB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1l
c3NhZ2UoKTsKICAgICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlv
bl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVz
c2FnZS5nZXQoKSk7CisgICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0
aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlKTsKICNlbmRpZgogCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggN2M0NDA4NTE2NzczNjhiNWRmODlhODZmZjRkM2I1MTUzNGI5MGJi
Ny4uZjVkMGI5NWY5NWQ3OTBjMWEzNzNkZThiY2U4NGIzZTUxMWUxNDI4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQg
IkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNr
cy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0
aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNp
bXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBA
CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJp
dmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRs
ZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJz
aXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25z
dCBTdHJpbmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50
KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVt
ZW50LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3Rf
dD4gZW5kcG9pbnRNZXNzYWdlKQoreworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKSB7CisgICAgICAgIGlmIChwcm9jZXNzLnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjpTdGF0ZTo6UnVubmluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
IXByb2Nlc3MuY29ubmVjdGlvbigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1
dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7Cisg
ICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1l
c3NhZ2UuZ2V0KCkpOworICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3
NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVkNGMyMDUwMzdkLi5kYzk3ZWFmZGI2YjEzNmQwOTA2Yjkw
OWZmZWY3YWNiYjQwOTA2Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzIsMTEgKzMyLDE0IEBA
CiAjaW5jbHVkZSAiQXV0aGVudGljYXRvck1hbmFnZXIuaCIKICNpbmNsdWRlICJEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCIKKyNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5o
IgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9y
d2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc4LDEwIEBACiAjaW5jbHVkZSAiU09B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2luczsKQEAgLTgzLDEzICs5MCwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93
V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRp
YyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9y
ZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4g
bWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVu
Y3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFs
dWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCiBSZWY8V2Vic2l0ZURh
dGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2Vu
ZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEyOCw3IEBAIFdlYnNpdGVE
YXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2Vz
KGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
KyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUo
KTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjgsMTcgKzE0MSwxMiBA
QCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURl
c3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdl
dChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
cmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklE
KSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwogI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQ
cm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHkt
PnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJv
eHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQ
cm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAg
LTE2OSwxNyArMTc3LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBp
ZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQs
IHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9
CisKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxs
RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBX
ZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vz
c2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbigqdGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0
d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25z
dAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRy
OworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29y
a1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTksNiBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
ICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkK
LXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5p
c0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlm
IChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1OCwyMSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5
cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
IT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1
bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAg
ICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGlu
Z0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+
ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkg
eworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNp
dGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNz
QWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczNSwyNCBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdl
YnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1
cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAg
ICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
LT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90
aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUg
PSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFp
c1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzg5Nyw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxU
aW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsK
ICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
QEAgLTk5NCwxMiArOTkzLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRo
aXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0x
MDIxLDcgKzEwMTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVE
YXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0
TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5k
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lu
cywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlu
cywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExNzcsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZv
clRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6
UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
ZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMTkyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11
bUVudHJ5Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyht
X3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyhz
aXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRp
b24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVu
ZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1
bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEy
MTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVy
aW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUo
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTIzMSwyMCArMTIxOSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMs
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
ICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEy
MzcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNzMsMTIgKzEyNDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRo
ZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTI5Miw4ICsxMjYzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1
cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzcsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMjIsMTIgKzEyODksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVy
eVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMwMyw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzNjgsMjIgKzEzMjYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNT
dWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNl
VVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ3LDE0IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVu
ZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEz
NjgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ0MiwxMiArMTM4MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxMzkyLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTQ3NiwyNSArMTQwNCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQyMyw0MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVs
ZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGlj
cyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdy
YW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdh
dG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAg
ICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDcyLDMxIEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiBtX2Nv
bXBsZXRpb25IYW5kbGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0KLSAgICBSZWZQdHI8
Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2Fs
bGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAg
ICAgICB9KTsKKyAgICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRS
ZWYobmV3IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7CisgICAgCisgICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEY6OkNhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbbG9jYWxDYWxs
YmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwotICAgIH0KKyAgICB9
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNz
aW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUwNSwxMyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vz
c2luZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFi
bGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0
aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVS
TCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MjMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0
aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwy
LCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZh
bGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwx
MCArMTU0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1Zl
cnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBp
cmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBp
c1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTY4NSwxOCArMTU1NCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTY5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21w
bGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNS
dW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1ODAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODgsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjAyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFz
SGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRh
YmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTYy
Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5
SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTY0MCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJM
JiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjU0LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRo
ZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVy
ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2Myw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNl
SVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2
MiArMTY3MiwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdp
dGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJM
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNX
aXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVD
b29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0
dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2Fs
U3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNz
aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhi
b29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJs
ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEw
ICsxNzM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nl
c3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01v
ZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0
cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGlu
Zyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE5NDEsMjAgKzE3NTAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBX
ZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhj
b25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc2OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3Ry
aW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0
Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50
b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3Qg
VVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTk3OSwxOCArMTc4MSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2Nh
bFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9j
YWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTk4LDggKzE3OTUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDUsMTIgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNv
bmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1
dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgp
KQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QK
IHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAg
LTIwNDMsOSArMTgyNSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0
ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRo
ZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAg
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTIwODQsOCArMTg2Myw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlh
S2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJD
ZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0
aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlP
cmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAs
NiArMTkxOCw0NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRy
KHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0
aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9u
OjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlBy
b2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKGlz
UGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWls
ZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUo
cmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXBseShj
b25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKQoreworICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Cit9
CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkK
K3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKIGJv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25z
dAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5LDE3ICsx
OTg4LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNz
ZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsyMDA4LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsK
ICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAyNyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29s
IGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRp
b25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNDIsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNl
bHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDcyLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlv
bkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFT
dG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3Io
bV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdD
b29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAg
IHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBt
X3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0g
ICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29r
aWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNv
Y2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRl
bnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlz
cGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjksOCArMjEx
MCw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFt
ZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBh
cmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjIxNCwxMCBA
QCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
KCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVy
cyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24g
PSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgor
ICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjQ3LDYgQEAg
QVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAg
ICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omdl
dExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjU0LDE1IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZl
Y3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMo
bV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBm
ZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
QVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2Nh
bFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcg
KzIyODgsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0Uo
R0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hT
YWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjMwNSwxOCBAQCBXVEY6OlN0cmlu
ZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0
b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlO
UykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Np
b24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJv
dW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5p
dGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMjU4MCw3ICsyMzM4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91
bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAogICAgIHByb3Bh
Z2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCksICphcHBC
b3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHREYXRhU3Rv
cmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52
YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAqYXBwQm91
bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM0Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcm
IGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVy
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkudXBkYXRl
QnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllcklu
TmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMGRjOTFmMjNj
NDE1NDM5NWM4ZWJmODkwZjM1YmQwMTgwY2Q1MWFhZC4uNDVkZDk3YTFjZmYxY2QwMjE1NDBjYjJm
NjBjMjJmZTE2MDc4NThkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNp
bmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENT
UEkuaD4KICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCkBAIC03NSw2ICs3Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94
eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJD
ZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC04NCw2ICs4Nyw4IEBAIGNs
YXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2Rl
bCA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90
OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbkluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1
Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKQEAgLTEwOSw3ICsxMTQsMTIgQEAgcHVi
bGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAg
IHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURh
dGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwog
CiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMTksNiArMTI5LDEzIEBAIHB1YmxpYzoKICAgICAKICAg
ICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7
IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRG
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
KSBjb25zdDsKQEAgLTIzNSwxNSArMjUyLDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBw
ZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9p
ZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI2MSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2Vi
UHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisjZW5k
aWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2Vi
Q29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFByb3h5
U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVNl
dHRpbmdzOyB9CkBAIC0yNzIsOCArMjg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0K
QEAgLTI4Myw2ICsyOTUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJv
bGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1
cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRp
ZgpAQCAtMzU5LDcgKzM3Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVk
aWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0
cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsK
QEAgLTM5Nyw4ICs0MTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVu
dGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MzEsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1
ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6
OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlx
dWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBlMGMwNmUxZGVk
NDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJiNjJkYTZlZTA4
MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC00
Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9wcm94eVNldHRp
bmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
c2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4
ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9z
b3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5
MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBj
NTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8g
UHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNv
IHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29s
LgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdl
YnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1h
cnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURh
dGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFT
dG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2
MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0
ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRm
YTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1F
OiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUg
V2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklY
TUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRl
RGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3Jz
ID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3
b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJv
b2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0
ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vy
cm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0
aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQog
eworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25l
dHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi4yM2U0ZDEzNmIxMWM3
ODM1ZTE0ZWMxZWI0NWQ1MWI3NWU3NjA5OTdjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjAtMDktMjEgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5l
dHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0
ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW9zdCBjaGFuZ2VzIHRvIHRlc3RzIGFyZSBqdXN0IGNhbGxpbmcgYSBmdW5jdGlvbiBvbiB0
aGUgV0tXZWJzaXRlRGF0YVN0b3JlIGluc3RlYWQgb2YgdGhlIFdLUHJvY2Vzc1Bvb2wKKyAgICAg
ICAgYmVjYXVzZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3b3JrIHByb2Nl
c3MgYW5kIGl0IGhhcyBhIG5ldyBvd25lci4KKyAgICAgICAgRXhjZXB0aW9ucyBhcmUgbm90ZWQg
aW5saW5lLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0ZSk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyB0ZXN0IHdhcyBtYWtp
bmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUsIGdldHRpbmcgaXRzIHJlc291cmNlIGxvYWQgc3RhdGlz
dGljcyBkaXJlY3RvcnksCisgICAgICAgIHB1dHRpbmcgdGhpbmdzIGluIHRoYXQgZGlyZWN0b3J5
LCB0aGVuIHN0YXJ0aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5
dGhpbmcKKyAgICAgICAgd29ya3Mgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5ldHdvcmsgcHJvY2Vz
cy4gIE5vdywgbmV0d29yayBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgd2hlbiBhCisg
ICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBpbnN0YW50aWF0ZWQsIHNvIHdlIG5lZWQgdG8g
cHV0IHRoaW5ncyB0aGVyZSBiZWZvcmUgaW5zdGFudGlhdGluZyBhIFdLV2Vic2l0ZURhdGFTdG9y
ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3Jr
ZXJCYXNpYy5tbToKKyAgICAgICAgQmVmb3JlIHRoaXMgY2hhbmdlLCBlYWNoIFdLUHJvY2Vzc1Bv
b2wgaGFkIGl0cyBvd24gbmV0d29yayBwcm9jZXNzLCB3aGljaCBob2xkcyB0aGUgc2VydmljZSB3
b3JrZXIgcmVnaXN0cnkKKyAgICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlcyB1c2VkIHdp
dGggdGhhdCBwcm9jZXNzIHBvb2wuICBOb3csIHRoZSBuZXR3b3JrIHByb2Nlc3Mgc3RpbGwgbmVl
ZHMgdG8gaGF2ZSBhIHNlcnZpY2UKKyAgICAgICAgd29ya2VyIHJlZ2lzdHJ5IGluIGl0LCBidXQg
d2hlbiB3ZSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGl0IGxvb2tpbmcgZm9yIGEgd2ViIHByb2Nl
c3MgdG8gcnVuIHRoZSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciwgd2UgZ28gYXJiaXRyYXJpbHkg
dG8gdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0aGF0IGhhcyBhIHByb2Nlc3Mgd2UgY2FuIHVzZS4g
IFRoaXMgbG9naWMgaXMgaW4gCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MuICBCZWNhdXNlIHdlIHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sIGVhY2gKKyAgICAgICAgdGltZSwgc2V0dGluZyB0aGUgY3VzdG9t
IHVzZXIgYWdlbnQgdG8gdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gdHdvIGRpZmZlcmVudCBwcm9j
ZXNzIHBvb2xzIGNhdXNlcyBvbmx5IG9uZQorICAgICAgICB0byBiZSB1c2VkLiAgVGhpcyBpcyBu
b3QgYSBwcm9ibGVtIGluIHByYWN0aWNlLCB0aG91Z2gsIGJlY2F1c2UgdGhlIG9ubHkgYXBwbGlj
YXRpb24gdGhhdCB1c2VzIHRoZSBTUEkgdG8KKyAgICAgICAgc2V0IGEgc2VydmljZSB3b3JrZXIn
cyBjdXN0b20gdXNlciBhZ2VudCBpcyBTYWZhcmksIHdoaWNoIG9ubHkgaGFzIG9uZSBwcm9jZXNz
IHBvb2wuICBUaGlzIHRlc3Qgc3RpbGwgdmVyaWZpZXMKKyAgICAgICAgdGhhdCBhIHVzZXIgYWdl
aW50IGlzIGNvcnJlY3RseSBzZW50LgorICAgICAgICBTaW1pbGFybHksIHRoZSB0ZXN0cyB0aGF0
IGNvdW50IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3NlcyBlaXRoZXIgaGF2ZSBkaWZmZXJlbnQgcmVz
dWx0cyBvciBuZWVkIHRvIGJlIHJ1biB3aXRoCisgICAgICAgIG9uZSBwcm9jZXNzIHBvb2wgcGVy
IHBhcmVudCBwcm9jZXNzLiAgVG8ga2VlcCB0aGUgcmVzdWx0cyB0aGUgc2FtZSwgSSBzZXBhcmF0
ZWQgdGhlIHRlc3RzIGludG8gZGlmZmVyZW50CisgICAgICAgIFRFU1QoU2VydmljZVdvcmtlcnMs
IC4uLikgbWFjcm9zIHdoaWNoIGFyZSBydW4gaW4gc2VwYXJhdGUgcGFyZW50IHByb2Nlc3Nlcy4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0
b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyBpcyB0
aGUgd2hvbGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29rIGEgdGVzdCB0
aGF0IHdhcyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQgTlNIVFRQQ29v
a2llU3RvcmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBpdCBmbGFreSBu
b3doZXJlIChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQgY29ycmVjdGx5
IGhhbmRsZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAgICAgIGJlZm9y
ZSB0aGlzIGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0IGluZnJhc3Ry
dWN0dXJlIGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3RhdGljIHZhcmlh
YmxlcyBmb3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorICAgICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXJUZXN0aW5nIGlzIG5vdCBuZWVkZWQsIHNvIEkgcmVtb3ZlZCBpdC4KKyAg
ICAgICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgbmVlZGVkIGFu
eSBtb3JlIGJlY2F1c2UgV0tDb250ZXh0UmVmIChXZWJQcm9jZXNzUG9vbCkgZG9lc24ndAorICAg
ICAgICBvd24gYSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUsIHNvIGl0IGRvZXNuJ3QgY2FyZSB3
aGljaCBpcyB0aGUgZGVmYXVsdCBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBJbiBmYWN0LCB0
aGUgImRlZmF1bHQiIFdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgcmVhbGx5IGltcG9ydGFudCBpbiB0
aGUgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAg
PGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5r
IHN1YmZyYW1lIGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAx
ZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjUzNzk4NGRlN2UzZTU2NjkwZTU2YmI0
YmQ2MzllMmZlZWRjNTkxYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQ
ZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBAQCBURVNUKFdl
YktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbikKICAgICBwaWRf
dCB3ZWJWaWV3MlBJRCA9IFt3ZWJWaWV3Mi5nZXQoKSBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdOwog
ICAgIEVYUEVDVF9ORSh3ZWJWaWV3MVBJRCwgd2ViVmlldzJQSUQpOwogCi0gICAgcGlkX3QgaW5p
dGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmlmZXIgPSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWZlciwgMCk7CiAgICAga2lsbChpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZl
ciwgU0lHS0lMTCk7CiAgICAgVXRpbDo6cnVuKCZuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwpAQCAt
OTYsNyArOTcsNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbikKICAgICBbd2ViVmlldzEuZ2V0KCkgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXV1dOwogICAgIFt3ZWJWaWV3MS5nZXQoKSBfdGVzdF93YWl0Rm9yRGlkRmlu
aXNoTmF2aWdhdGlvbl07CiAKLSAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwor
ICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwog
ICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciwgcmVsYXVuY2hl
ZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgRVhQRUNUX0ZBTFNFKG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk7CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1By
b2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2Vi
VmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUg
cGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3
ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBz
dGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAg
IFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JX
ZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2Vi
VmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpAQCAtMTU4LDcgKzE1
OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJl
KQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0ZB
TFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dlYlZpZXcgX3dlYlByb2Nl
c3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dUKFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5MzlmZDU5ZjIy
OGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYy
MDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRv
dWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9G
bwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRh
KTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5k
ID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAg
ICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6
OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FM
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3
N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRF
U1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGZl
YjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFi
NjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxldGVSZWNv
dmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4
VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhh
NGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVw
Z3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4K
QEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJh
c2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUz
ZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2Qg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNl
IGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJh
c2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5
M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1
MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFi
YXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJl
cXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVl
OwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAx
YzI3MmI2NTAzOTM5MDExNjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNi
OTVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVl
Lmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nl
c3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5j
ZS5tbQppbmRleCBiMzJjZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIy
MDMyMmU0NzhkMWRhYzc4ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNp
c3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdv
cmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIg
dmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmll
dyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkg
b2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAg
IHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRX
ZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1
c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2
MDAwNWZkMGQuLjUxMGIyNGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5l
bnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3Rl
ZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4
cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJ
bmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBb
d2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jl
c3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIp
OwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNi
NTUxYzFlODFlOTYzZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFk
YzliOWZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRl
IG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0p
OwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRo
LmdldCgpLnBhdGggZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmlu
ZGV4IDQxMzNlZTdiM2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNj
NzcxZTlkOWU0NDJhMGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDks
NyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2Ug
Ym9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3Nh
Z2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0
TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFn
ZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlw
dE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUn
KSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcg
QEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0g
ICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vz
cy5tbQppbmRleCBlNjBmODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIx
ZjkwOTUwMDE0ZjZjNDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAg
LTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBb
cG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUu
cm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0
ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0
b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0
TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBF
WFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtw
b29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVy
ZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2Vi
S2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUw
YjQyMTZkM2NkMDkzNmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkz
NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292
ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4
ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2
NWMxNDQyM2YzYWM1NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAt
NTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0Fm
dGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2Vi
VmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVl
YWYxMWU4Li5hM2FiYTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5S
dW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1
OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFG
cm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsK
KyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9y
YXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNz
RGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAg
IGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
OwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25d
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9
IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5k
YiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Q
cm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlz
dHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5
SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxd
OwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpm
aWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpk
YXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
biBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3Rv
cmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3Nl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBk
b25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZv
ckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hh
cmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAg
ICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAg
ICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRs
ZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpp
bmRleCAzNGE0ZjVjNTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2
ZGE0NzIzNTY1NWZmMGRiMmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpA
QCAtNTU4LDcgKzU1OCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRl
KQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJB
Z2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3Nh
Z2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5k
bGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRo
RXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdl
bnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAg
ICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VS
ZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0
RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZl
cih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAg
fSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1
cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9j
ZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0g
ZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2Vy
dmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAg
RVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3Mu
CiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmln
aW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUg
ZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgIH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcywg
YgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dl
YlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJz
LCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBP
dXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1
ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisK
K1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0
TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2Fk
QWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0Jl
Zm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMs
IExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNl
V29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRy
dWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9F
USgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2Vy
cywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VX
b3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1
ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VR
KDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEg
QEAgVEVTVChTZXJ2aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRo
XSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUw
YWFiNGI0MmYzNmM0NmFlY2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZl
NDUyMTdiOTE0ZmUyYTU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYg
QEAgc3RhdGljIGJvb2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJ
IHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3
b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVt
IGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCAr
NTg3LDY2IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQ
cmV3YXJtaW5nKQogICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09i
amVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChO
U1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0g
KHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5l
bFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFt
ZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAg
ZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3Ry
aW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5h
dXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAg
IHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsn
KTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ld
ID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9p
bignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29v
a2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0g
W1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5T
SFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3Bl
cnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQ
Q29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZh
bHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4w
LjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNl
OworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tp
ZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAg
ICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlE
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6
W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpA
Imh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0
Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVz
dFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJW
aWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tp
ZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9v
bEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4g
ZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lz
dGVudERhdGFTdG9yZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9y
ZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAg
IE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1
bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0
aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0
KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBs
b2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZm
aW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVz
RXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFu
ZGxlci1sZWFrcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1
MTE1ZDE2Y2QyM2IyMmUuLmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2Eg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVt
ZUhhbmRsZXIsIExlYWtzMykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAg
IFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0lu
RmxpZ2h0KDApOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRl
eCA5MmNmM2E2MTk4YTViOWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi44MTc3OWUyODFjNjA3
NTQ3NTVhY2UxZDgwMWUyNjgxZDE0ZTViYzMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVD
dXN0b21QYXRocy5tbQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVE
YXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRF
CiAgICAgLy8gTm93LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5n
IGF0IHRoZSBzYW1lIGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBu
ZXdseSBmaXJlZCB1cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5k
IGRlbGV0ZSBBUElzIHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgYXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0
YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNv
b2tpZXMsIG5pbF0gY29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNv
cmQgKj4gKiByZWNvcmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNo
b3VsZEUKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1v
dmVEYXRhT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29r
aWVzLCBuaWxdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhh
bmRsZXI6XiB7CkBAIC0zODUsMTEgKzM4NSwxMCBAQCBURVNUKFdlYktpdCwgQ3VzdG9tRGF0YVN0
b3JlRGVzdHJveVdoaWxlRmV0Y2hpbmdOZXR3b3JrUHJvY2Vzc0RhdGEpCiAKICAgICAgICAgLy8g
VGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpbGUgYSBxdWVyeSBpcyBwZW5kaW5nLgog
ICAgICAgICBhdXRvKiBhbGxQcm9jZXNzUG9vbHMgPSBbV0tQcm9jZXNzUG9vbCBfYWxsUHJvY2Vz
c1Bvb2xzRm9yVGVzdGluZ107Ci0gICAgICAgIEFTU0VSVF9FUSgxVSwgW2FsbFByb2Nlc3NQb29s
cyBjb3VudF0pOwotICAgICAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IGFsbFByb2Nlc3NQb29sc1sw
XTsKLSAgICAgICAgd2hpbGUgKCFbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cl0pCisgICAgICAgIEFTU0VSVF9FUSgwVSwgW2FsbFByb2Nlc3NQb29scyBjb3VudF0pOworICAg
ICAgICB3aGlsZSAoIVtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCiAgICAg
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzbGVlcCgwLjAxKTsKLSAgICAgICAga2lsbChb
cHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOworICAgICAg
ICBraWxsKFtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOwog
ICAgICAgICBhbGxQcm9jZXNzUG9vbHMgPSBuaWw7CiAgICAgICAgIGRhdGFTdG9yZSA9IG5pbDsK
ICAgICB9CkBAIC01MzksNyArNTM4LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZh
dWx0RGF0YVN0b3JlQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2Vi
Vmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsK
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTYsNyBAQCBU
RVNUKFdlYktpdCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAg
ZG9uZSA9IHRydWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFM
U0UoZXJyb3IpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQppbmRleCAyMmUxYTBhOWU4ZTI2ODA0NWU2
YjE3YzMwNmIwMDE0ZDViYzkxMjY4Li43Yjg0NzhiNTk3OWZhNzRiOWNkNTlkMDYyZWFkZDBkM2M1
MTUxZmQ3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMv
Q3VzdG9tUHJvdG9jb2xzVGVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogc3RhdGljIGJvb2wgdGVzdEZpbmlzaGVk
OwpAQCAtNzIsNiArNzQsOCBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCgp
CiAgICAgcmV0dXJuIHByb2Nlc3NHcm91cDsKIH0KIAorc3RhdGljIFJldGFpblB0cjxXS1ZpZXc+
IHdrVmlldzsKKwogQGludGVyZmFjZSBDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2NvbCA6IFRlc3RQ
cm90b2NvbAogQGVuZAogCkBAIC04OSw3ICs5Myw3IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAq
cHJvY2Vzc0dyb3VwKCkKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0U2V0Q2xpZW50KFtw
cm9jZXNzR3JvdXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAKLSAgICAgICAga2ls
bChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nlc3NHcm91cCgpIF9j
b250ZXh0UmVmXSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0ZURhdGFTdG9yZUdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFt3a1Zp
ZXcgcGFnZVJlZl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVudCBVUkxQcm90b2Nv
bDpzZWxmIGRpZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FF
cnJvckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9CkBAIC0xNDIsNyAr
MTQ2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZvaWQgcnVuVGVzdCgp
CiB7CiAgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJyb3dzaW5nQ29udGV4
dEdyb3VwID0gYWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxsb2NdIGluaXRXaXRo
SWRlbnRpZmllcjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0cjxXS1ZpZXc+IHdr
VmlldyA9IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4
dEdyb3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tWaWV3ID0gYWRvcHRO
UyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3Np
bmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9tUHJvdG9jb2xzTG9h
ZERlbGVnYXRlPiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJvdG9jb2xzTG9hZERl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9s
bGVyXS5sb2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAgW1t3a1ZpZXcgYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVAOi8vcmVkaXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1dXV07CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2VkZGI4MjE1NzQ3
NWQ4MWYxMjIwZjQ1NmI4NjRjM2IxNzEuLjNhYzkzYTZkNjNlYTVmMjQxYjQ3NThlNzZiNWY3OWQw
NDI1NDI5NTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBA
IC0xMDYxLDggKzEwNjEsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRR
dW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2
aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRl
eHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFs
c2UpOwpAQCAtMTIzNyw3ICsxMjM1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluZEFuZER1
bXBXZWJLaXRQcm9jZXNzSWRlbnRpZmllcnMoKQogICAgIGR1bXBSZXNwb25zZShtYWtlU3RyaW5n
KFRlc3RDb250cm9sbGVyOjp3ZWJQcm9jZXNzTmFtZSgpLCAiOiAiLAogICAgICAgICBXS1BhZ2VH
ZXRQcm9jZXNzSWRlbnRpZmllcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpKSwgJ1xuJywKICAgICAgICAgVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9j
ZXNzTmFtZSgpLCAiOiAiLAotICAgICAgICBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIobV9jb250ZXh0LmdldCgpKSwgJ1xuJykpOworICAgICAgICBXS1dlYnNpdGVEYXRhU3Rv
cmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9yZSgpKSwgJ1xuJykp
OwogI2Vsc2UKICAgICBkdW1wUmVzcG9uc2UoIlxuIl9zKTsKICNlbmRpZgpAQCAtMjI5Nyw3ICsy
Mjk1LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2V0SW5qZWN0
ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKCkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7Ci0gICAgcGlkX3QgcGlkID0gV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSk7CisgICAgcGlkX3QgcGlk
ID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVE
YXRhU3RvcmUoKSk7CiAgICAgZnByaW50ZihzdGRlcnIsICIjQ1JBU0hFRCAtICVzIChwaWQgJWxk
KVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogICAg
IGV4aXQoMSk7CiB9CkBAIC0zMTM2LDcgKzMxMzQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpz
ZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0g
ICAgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRh
U3RvcmUoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCkKQEAgLTMxNjcsOSArMzE2NSw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAg
cmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAK
LVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1
cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRl
eHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0g
ICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdl
YnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425027"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409350</attachid>
            <date>2020-09-21 23:56:20 -0700</date>
            <delta_ts>2020-09-22 09:21:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921235619.patch</filename>
            <type>text/plain</type>
            <size>340192</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3J