<?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>198317</bug_id>
          
          <creation_ts>2019-05-28 17:48:13 -0700</creation_ts>
          <short_desc>WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store</short_desc>
          <delta_ts>2019-06-05 14:59:54 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sroberts</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1539835</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-28 17:48:13 -0700</bug_when>
    <thetext>In non-persistent session, we used SessionStorageNameSpace for localStorage and used in-memory map for sessionStorage. This is confusing, and makes it hard to maintain the same behavior for persistent session and non-persistent session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539836</commentid>
    <comment_count>1</comment_count>
      <attachid>370815</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-28 17:52:06 -0700</bug_when>
    <thetext>Created attachment 370815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540036</commentid>
    <comment_count>2</comment_count>
      <attachid>370815</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-05-29 11:47:05 -0700</bug_when>
    <thetext>Comment on attachment 370815
Patch

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

R=me with a few comments, mostly stylistic.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:94
&gt; +    Ref&lt;StorageArea&gt; getOrCreateStorageArea(SecurityOriginData&amp;&amp;, bool);

bool isEphemeral
Or
enum class IsEphemeral : bool { No, Yes }

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:388
&gt; +    default:

Let&apos;s remove this default.

&gt; Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp:50
&gt; +    return createLocalStorageNamespace(identifier, quotaInBytes, true);

Let&apos;s give this &quot;true&quot; a name.
Either use enum class IsEphemeral : bool { No, Yes } or bool isEphemeral = true;

&gt; Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h:44
&gt; -    static Ref&lt;StorageNamespaceImpl&gt; createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes);
&gt; +    static Ref&lt;StorageNamespaceImpl&gt; createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes, bool isEphemeral = false);

I think with something like this we shouldn&apos;t have a default parameter so we don&apos;t forget to state whether it&apos;s ephemeral or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540176</commentid>
    <comment_count>3</comment_count>
      <attachid>370897</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-29 16:43:41 -0700</bug_when>
    <thetext>Created attachment 370897
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540189</commentid>
    <comment_count>4</comment_count>
      <attachid>370897</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-29 17:24:04 -0700</bug_when>
    <thetext>Comment on attachment 370897
Patch for landing

Clearing flags on attachment: 370897

Committed r245881: &lt;https://trac.webkit.org/changeset/245881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540190</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-29 17:24:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540192</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-29 17:25:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/51244662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540317</commentid>
    <comment_count>7</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-05-30 09:20:03 -0700</bug_when>
    <thetext>It appears that the changes in https://trac.webkit.org/changeset/245881/webkit

has broken 13 tests:
imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-noopener.html
imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-noreferrer.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_blank-002.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_parent-004.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_self-002.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_top-001.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_top-002.html
imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/choose-_top-003.html
imported/w3c/web-platform-tests/html/browsers/windows/noreferrer-null-opener.html
imported/w3c/web-platform-tests/html/browsers/windows/noreferrer.html
storage/domstorage/events/basic-setattribute.html
storage/domstorage/events/basic.html
storage/domstorage/events/case-sensitive.html

I reproduced this by running the tests on 245881 which failed and on 245880 which all passed.

Results:
https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r245884%20(4380)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540338</commentid>
    <comment_count>8</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-05-30 09:58:58 -0700</bug_when>
    <thetext>Reverted r245881 for reason:

Broke 13 Layout tests on WK2

Committed r245891: &lt;https://trac.webkit.org/changeset/245891&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540511</commentid>
    <comment_count>9</comment_count>
      <attachid>370897</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-30 16:41:00 -0700</bug_when>
    <thetext>Comment on attachment 370897
Patch for landing

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

&gt; Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:80
&gt; +    return StorageNamespaceImpl::createLocalStorageNamespace(m_identifier, quota, StorageNamespaceImpl::IsEphemeral::Yes);

Oops, this should be NO. 

Tested the fix on local build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540512</commentid>
    <comment_count>10</comment_count>
      <attachid>370995</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-30 16:41:36 -0700</bug_when>
    <thetext>Created attachment 370995
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540525</commentid>
    <comment_count>11</comment_count>
      <attachid>370995</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-30 17:03:40 -0700</bug_when>
    <thetext>Comment on attachment 370995
Patch for landing

Rejecting attachment 370995 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 370995, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=370995&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=198317&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 370995 from bug 198317.
Fetching: https://bugs.webkit.org/attachment.cgi?id=370995
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 9 diffs from patch file(s).
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
patching file Source/WebKit/NetworkProcess/WebStorage/StorageManager.h
Hunk #1 succeeded at 103 (offset 2 lines).
Hunk #2 FAILED at 112.
1 out of 2 hunks FAILED -- saving rejects to file Source/WebKit/NetworkProcess/WebStorage/StorageManager.h.rej
patching file Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp
patching file Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp
patching file Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h
patching file Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/12333153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540567</commentid>
    <comment_count>12</comment_count>
      <attachid>371012</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-30 18:36:25 -0700</bug_when>
    <thetext>Created attachment 371012
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540587</commentid>
    <comment_count>13</comment_count>
      <attachid>371012</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-30 19:19:18 -0700</bug_when>
    <thetext>Comment on attachment 371012
Patch for landing

Clearing flags on attachment: 371012

Committed r245943: &lt;https://trac.webkit.org/changeset/245943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540588</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-30 19:19:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540630</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-05-30 21:40:50 -0700</bug_when>
    <thetext>This change appears to have caused the following API test failure:

    TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        
        /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:141
        Value of: [@&quot;value&quot; isEqualToString:result]
          Actual: false
        Expected: true
        
https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20(Tests)/builds/4400/steps/run-api-tests/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540804</commentid>
    <comment_count>16</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-05-31 12:49:23 -0700</bug_when>
    <thetext>Reverted r245943 for reason:

Caused API test WKWebView.LocalStorageProcessSuspends to fail on release bots.

Committed r245978: &lt;https://trac.webkit.org/changeset/245978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540943</commentid>
    <comment_count>17</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-31 21:26:11 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #15)
&gt; This change appears to have caused the following API test failure:
&gt; 
&gt;     TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
&gt;         
&gt;        
&gt; /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/
&gt; WebKitCocoa/LocalStoragePersistence.mm:141
&gt;         Value of: [@&quot;value&quot; isEqualToString:result]
&gt;           Actual: false
&gt;         Expected: true
&gt;         
&gt; https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; builds/4400/steps/run-api-tests/logs/stdio

I cannot reproduce the test failure, but I do get flaky timeout on this test when running multiple times. I will fix the test first in https://bugs.webkit.org/show_bug.cgi?id=198450.

As the failure didn&apos;t reveal too much information, I also changed to use EXPECT_WK_STREQ instead of EXPECT_TRUE in the fix above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541717</commentid>
    <comment_count>18</comment_count>
      <attachid>371325</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-06-04 13:12:41 -0700</bug_when>
    <thetext>Created attachment 371325
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541726</commentid>
    <comment_count>19</comment_count>
      <attachid>371325</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-04 13:54:37 -0700</bug_when>
    <thetext>Comment on attachment 371325
Patch for landing

Clearing flags on attachment: 371325

Committed r246079: &lt;https://trac.webkit.org/changeset/246079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541727</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-04 13:54:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541756</commentid>
    <comment_count>21</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-06-04 15:24:31 -0700</bug_when>
    <thetext>It appears after patch re landed as r246079 the same API test is failing flakily on Release bots. 

I am trying to reproduce it locally and so far I cannot. Trying on a few other machines and will post repro steps if possible. Appears to be a different failure message than previously.

￼https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/4486/steps/run-api-tests/logs/stdio

TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
        _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
        
        /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:142
        Expected equality of these values:
          @&quot;value&quot;
            Which is: &quot;value&quot;
          result
            Which is: &quot;newValue&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542004</commentid>
    <comment_count>22</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-06-05 08:58:19 -0700</bug_when>
    <thetext>(In reply to Shawn Roberts from comment #21)
&gt; It appears after patch re landed as r246079 the same API test is failing
&gt; flakily on Release bots. 
&gt; 
&gt; I am trying to reproduce it locally and so far I cannot. Trying on a few
&gt; other machines and will post repro steps if possible. Appears to be a
&gt; different failure message than previously.
&gt; 
&gt; ￼https://build.webkit.org/builders/
&gt; Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/4486/steps/run-api-tests/
&gt; logs/stdio
&gt; 
&gt; TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
&gt;         _RegisterApplication(), FAILED TO establish the default connection
&gt; to the WindowServer, _CGSDefaultConnection() is NULL.
&gt;         _RegisterApplication(), FAILED TO establish the default connection
&gt; to the WindowServer, _CGSDefaultConnection() is NULL.
&gt;         
&gt;        
&gt; /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/
&gt; WebKitCocoa/LocalStoragePersistence.mm:142
&gt;         Expected equality of these values:
&gt;           @&quot;value&quot;
&gt;             Which is: &quot;value&quot;
&gt;           result
&gt;             Which is: &quot;newValue&quot;

I cannot reproduce the failure either. If you find the failure shows up on some bot very frequently, probably we want to debug on that bot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542143</commentid>
    <comment_count>23</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-06-05 13:29:44 -0700</bug_when>
    <thetext>Was able to reproduce with a release build.

run-api-tests TestWebKitAPI.WKWebView.LocalStorageProcessSuspends --iter 5

Failed

    TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
        _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

        /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:142
        Expected equality of these values:
          @&quot;value&quot;
            Which is: &quot;value&quot;
          result
            Which is: &quot;newValue&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542184</commentid>
    <comment_count>24</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-06-05 14:59:54 -0700</bug_when>
    <thetext>(In reply to Shawn Roberts from comment #23)
&gt; Was able to reproduce with a release build.
&gt; 
&gt; run-api-tests TestWebKitAPI.WKWebView.LocalStorageProcessSuspends --iter 5
&gt; 
&gt; Failed
&gt; 
&gt;     TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
&gt;         _RegisterApplication(), FAILED TO establish the default connection
&gt; to the WindowServer, _CGSDefaultConnection() is NULL.
&gt;         _RegisterApplication(), FAILED TO establish the default connection
&gt; to the WindowServer, _CGSDefaultConnection() is NULL.
&gt; 
&gt;        
&gt; /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/
&gt; WebKitCocoa/LocalStoragePersistence.mm:142
&gt;         Expected equality of these values:
&gt;           @&quot;value&quot;
&gt;             Which is: &quot;value&quot;
&gt;           result
&gt;             Which is: &quot;newValue&quot;

https://bugs.webkit.org/show_bug.cgi?id=198582.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370815</attachid>
            <date>2019-05-28 17:52:06 -0700</date>
            <delta_ts>2019-05-29 16:43:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198317-20190528175206.patch</filename>
            <type>text/plain</type>
            <size>32791</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1ODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVmMzNiZmUxYWI0OWY0ODI4
MmQzOTJhY2VhZjYxNGM1Y2RjOWUzMWMuLmM0Yzc4NjE4NjkwMzcxNDI2ZDc3Y2Y2MGYxYTA0M2Fl
ZjVkMWZjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMDUtMjggIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQ
SSBmYWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRh
IHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgTG9jYWxTdG9yYWdlTmFtZVNwYWNlIGluc3RlYWQgb2YgU2Vzc2lvblN0b3JhZ2VOYW1lU3Bh
Y2UgZm9yIGxvY2FsU3RvcmFnZSBpbiBlcGhlbWVyYWwgc2Vzc2lvbiBvciAKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6U3RvcmFn
ZUFyZWE6OmlzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VBcmVhOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6c2V0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVk
ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjp+TG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJl
YSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6ZXBoZW1lcmFsT3JpZ2lucyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsb25l
VG8pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VP
cmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFn
ZU9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
TG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9kaWZpZWRTaW5jZSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3Jp
Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3Jh
Z2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50
TG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0
ZVNlc3Npb25TdG9yYWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRl
c3Ryb3lTdG9yYWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFZh
bHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUFyZWE6OmlzU2Vzc2lvblN0b3JhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVh
TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU3RvcmFn
ZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lv
blN0b3JhZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlRXBoZW1l
cmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmg6CisKIDIwMTktMDUtMjggIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRlYWQg
Y29kZSBmcm9tIHNhbmRib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggMDAzOTQ1MDUzZjU1
MDM0YzIzMDg3ZTkwNzk4YmY5YjdkZmJlODYyMy4uNjlmY2ZhNzUzN2NhYzhhY2NkYmU4ZGE0N2M5
OTY1MzkxNWI4ODkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMoKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICBib29sIGlzU2Vzc2lvblN0b3JhZ2UoKSBjb25zdCB7
IHJldHVybiAhbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7IH0KKyAgICBib29sIGlzRXBoZW1lcmFs
KCkgY29uc3QgeyByZXR1cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgU3RvcmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKQEAgLTcyLDcgKzcy
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlE
LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5n
JiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwogCi0gICAgLy8gV2ls
bCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVsb25ncyB0byBhIHNlc3Npb24gc3RvcmFn
ZSBuYW1lc3BhY2UuCisgICAgLy8gV2lsbCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVs
b25ncyB0byBhIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2Ugb3IgdGhlIHN0b3JhZ2UgYXJlYSBp
cyBpbiBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIG1f
bG9jYWxTdG9yYWdlTmFtZXNwYWNlOwogICAgIG11dGFibGUgUmVmUHRyPExvY2FsU3RvcmFnZURh
dGFiYXNlPiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlOwogICAgIG11dGFibGUgYm9vbCBtX2RpZElt
cG9ydEl0ZW1zRnJvbURhdGFiYXNlIHsgZmFsc2UgfTsKQEAgLTkxLDEyICs5MSwxNSBAQCBwdWJs
aWM6CiAKICAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSBjb25zdCB7IHJldHVy
biAmbV9zdG9yYWdlTWFuYWdlcjsgfQogCi0gICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRPckNyZWF0
ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKKyAgICBSZWY8U3RvcmFnZUFyZWE+
IGdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYsIGJvb2wpOwogICAg
IHZvaWQgZGlkRGVzdHJveVN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhKik7CiAKICAgICB2b2lkIGNs
ZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJik7
CiAgICAgdm9pZCBjbGVhckFsbFN0b3JhZ2VBcmVhcygpOwogCisgICAgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4gZXBoZW1lcmFsT3JpZ2lucygpIGNvbnN0OworICAgIHZvaWQgY2xvbmVUbyhM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CisKIHByaXZh
dGU6CiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyJiwgdWludDY0X3Qg
c3RvcmFnZU1hbmFnZXJJRCk7CiAKQEAgLTEwNCw4ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIHVp
bnQ2NF90IG1fc3RvcmFnZU5hbWVzcGFjZUlEOwogICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVz
OwogCi0gICAgLy8gV2UgZG9uJ3QgaG9sZCBhbiBleHBsaWNpdCByZWZlcmVuY2UgdG8gdGhlIFN0
b3JhZ2VBcmVhczsgdGhleSBhcmUga2VwdCBhbGl2ZSBieSB0aGUgbV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24gbWFwIGluIFN0b3JhZ2VNYW5hZ2VyLgotICAgIEhhc2hNYXA8U2VjdXJpdHlPcmln
aW5EYXRhLCBTdG9yYWdlQXJlYSo+IG1fc3RvcmFnZUFyZWFNYXA7CisgICAgSGFzaE1hcDxTZWN1
cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFNYXA7CiB9
OwogCiAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rp
c2stc3BhY2UKQEAgLTE5Niw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aQogCiB2
b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6cmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKIHsK
LSAgICBBU1NFUlQoaXNTZXNzaW9uU3RvcmFnZSgpIHx8IG1fZXZlbnRMaXN0ZW5lcnMuY29udGFp
bnMoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKSk7CisgICAgQVNT
RVJUKGlzRXBoZW1lcmFsKCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6Om1ha2Vf
cGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKICAgICBtX2V2ZW50TGlzdGVuZXJz
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpOwogfQog
CkBAIC0yMzYsNyArMjM4LDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpz
ZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjCiAKIHZvaWQgU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgaXRlbXMpCiB7Ci0gICAgQVNTRVJUKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKTsK
KyAgICAvLyBJbXBvcnQgaXRlbXMgZnJvbSB3ZWIgcHJvY2VzcyBpZiBpdGVtcyBhcmUgbm90IHN0
b3JlZCBvbiBkaXNrLgorICAgIGlmICghaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgU3RyaW5nIG9sZFZhbHVl
OwogICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOwpAQCAtMzExLDkgKzMxNiwxMCBAQCB2b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJ
Zk5lZWRlZCgpIGNvbnN0CiAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgQVNTRVJUKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdl
TWFuYWdlcigpLT5tX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcik7CiAgICAgLy8gV2Ugb3Bl
biB0aGUgZGF0YWJhc2UgaGVyZSBldmVuIGlmIHdlJ3ZlIGFscmVhZHkgaW1wb3J0ZWQgb3VyIGl0
ZW1zIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhYmFzZSBpcyBvcGVuIGlmIHdlIG5lZWQgdG8gd3Jp
dGUgdG8gaXQuCiAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX2xvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9xdWV1ZS5jb3B5UmVmKCksIG1f
bG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX2xvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlci5jb3B5UmVmKCksIG1fc2VjdXJpdHlPcmlnaW4pOworICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX2xvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9xdWV1ZS5jb3B5UmVmKCksICpt
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIsIG1fc2VjdXJpdHlPcmlnaW4pOwogCiAgICAgaWYgKG1fZGlkSW1wb3J0
SXRlbXNGcm9tRGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCwxNCArMzU2LDEzIEBA
IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZShTdG9yYWdlTWFuYWdlciYgc3RvCiAKIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VO
YW1lc3BhY2U6On5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKQogewotICAgIEFTU0VSVChtX3N0b3Jh
Z2VBcmVhTWFwLmlzRW1wdHkoKSk7CiB9CiAKLWF1dG8gU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3Rv
cmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEm
JiBzZWN1cml0eU9yaWdpbikgLT4gUmVmPFN0b3JhZ2VBcmVhPgorYXV0byBTdG9yYWdlTWFuYWdl
cjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5
T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luLCBib29sIGlzRXBoZW1lcmFsKSAtPiBSZWY8U3Rv
cmFnZUFyZWE+CiB7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBwcm90ZWN0ZWRTdG9yYWdlQXJl
YTsKICAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFNYXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBb
Jl0oKSBtdXRhYmxlIHsKLSAgICAgICAgcHJvdGVjdGVkU3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJl
YTo6Y3JlYXRlKHRoaXMsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7
CisgICAgICAgIHByb3RlY3RlZFN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZShpc0Vw
aGVtZXJhbCA/IG51bGxwdHIgOiB0aGlzLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9xdW90
YUluQnl0ZXMpOwogICAgICAgICByZXR1cm4gcHJvdGVjdGVkU3RvcmFnZUFyZWEuZ2V0KCk7CiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQpAQCAtMzgzLDEwICszODgsMjYgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNo
aW5nT3JpZ2luKGNvbnMKIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNw
YWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCiB7Ci0gICAgZm9yIChhdXRvKiBzdG9yYWdlQXJl
YSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCisgICAgZm9yIChhdXRvIHN0b3JhZ2VBcmVh
IDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFy
KCk7CiB9CiAKK1ZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U6OmVwaGVtZXJhbE9yaWdpbnMoKSBjb25zdAoreworICAgIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdG9y
YWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFzdG9y
YWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChz
dG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgfQorICAgIHJldHVybiBvcmlnaW5z
OworfQorCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsb25l
VG8oTG9jYWxTdG9yYWdlTmFtZXNwYWNlJiBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCit7Cisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9zdG9yYWdlQXJlYU1hcCkKKyAgICAgICAgbmV3TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLm1fc3RvcmFnZUFyZWFNYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVl
LT5jbG9uZSgpKTsKK30KKwogY2xhc3MgU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4g
Y3JlYXRlKHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7CkBAIC00ODMsMTEgKzUwNCwxMSBAQCBSZWY8
U3RvcmFnZU1hbmFnZXI+IFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkpCiAKIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcihjb25z
dCBTdHJpbmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkKICAgICA6IG1fcXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZU1hbmFnZXIiKSkKLSAgICAsIG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6Y3Jl
YXRlKG1fcXVldWUuY29weVJlZigpLCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKQotICAgICwgbV9p
c0VwaGVtZXJhbChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCiB7CiAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBlbmNvZGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgd2Ugc3RhcnQgZGlzcGF0
Y2hpbmcgdGhpbmdzIHRvIHRoZSBxdWV1ZS4KICAgICBVVEY4RW5jb2RpbmcoKTsKKyAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmNyZWF0ZShtX3F1
ZXVlLmNvcHlSZWYoKSwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKIH0KIAogU3RvcmFnZU1hbmFn
ZXI6On5TdG9yYWdlTWFuYWdlcigpCkBAIC01NDgsNiArNTY5LDEzIEBAIHZvaWQgU3RvcmFnZU1h
bmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVz
cGFjZUlELCB1CiAgICAgICAgIEFTU0VSVChuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CiAK
ICAgICAgICAgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmNsb25lVG8oKm5ld1Nlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKTsKKworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbG9jYWxTdG9yYWdlTmFtZXNwYWNlID0gbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpKSB7CisgICAgICAg
ICAgICAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBuZXdsb2NhbFN0b3JhZ2VOYW1lc3BhY2Ug
PSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShuZXdTdG9yYWdlTmFtZXNwYWNlSUQp
OworICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xvbmVUbygqbmV3bG9j
YWxTdG9yYWdlTmFtZXNwYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0pOwog
fQogCkBAIC02MjksOCArNjU3LDE1IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3Rv
cmFnZU9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyCiAgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAKLSAgICAgICAg
Zm9yIChhdXRvJiBvcmlnaW4gOiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2lu
cygpKQotICAgICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAgaWYgKG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkpCisgICAgICAgICAg
ICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgbG9jYWxTdG9yYWdlTmFtZVNwYWNlIDogbV9sb2NhbFN0b3JhZ2VO
YW1lc3BhY2VzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4g
OiBsb2NhbFN0b3JhZ2VOYW1lU3BhY2UtPmVwaGVtZXJhbE9yaWdpbnMoKSkKKyAgICAgICAgICAg
ICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
CiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIG9yaWdpbiA6IHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lu
cygpKQpAQCAtNjQ2LDcgKzY4MSw5IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3Rv
cmFnZU9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyCiB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW5EZXRhaWxz
ID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPm9yaWdpbkRldGFpbHMoKTsKKyAgICAg
ICAgVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gb3Jp
Z2luRGV0YWlsczsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQor
ICAgICAgICAgICAgb3JpZ2luRGV0YWlscyA9IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LT5vcmlnaW5EZXRhaWxzKCk7CiAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtv
cmlnaW5EZXRhaWxzID0gV1RGTW92ZShvcmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2luRGV0YWlscykpOwpAQCAtNjYzLDIzICs3MDAs
MjkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZXMudmFsdWVzKCkpCiAgICAgICAgICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Ut
PmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29waWVkT3JpZ2luKTsKIAotICAgICAg
ICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2lu
KGNvcGllZE9yaWdpbik7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cikKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRh
YmFzZVdpdGhPcmlnaW4oY29waWVkT3JpZ2luKTsKICAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUg
dGltZSwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRpbWUs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRhdGFiYXNlc01vZGlmaWVkU2luY2UodGltZSk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKLSAgICAgICAgICAgIHRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKKyAgICAgICAgaWYg
KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKSB7CisgICAgICAgICAgICBhdXRvIG9yaWdp
bnNUb0RlbGV0ZSA9IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kYXRhYmFzZXNNb2Rp
ZmllZFNpbmNlKHRpbWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGF1dG8mIHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBvcmlnaW4gOiBvcmlnaW5zVG9EZWxldGUpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgb3JpZ2luIDogb3JpZ2luc1RvRGVsZXRlKSB7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFs
dWVzKCkpCisgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJT
dG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihvcmlnaW4pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFz
ZVdpdGhPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3Jh
Z2VOYW1lc3BhY2VzLnZhbHVlcygpKQotICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihvcmlnaW4pOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGVsZXRlRGF0
YWJhc2VXaXRoT3JpZ2luKG9yaWdpbik7CisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VBcmVhcygpOwogICAgICAgICB9CiAKICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcw
Miw3ICs3NDUsOCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRy
aWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6UwogICAgICAgICAgICAgZm9yIChh
dXRvJiB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICAgdHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKG9yaWdpbik7
CiAKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRh
YmFzZVdpdGhPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcikKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG9yaWdpbik7CiAgICAgICAgIH0KIAogICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwpAQCAtNzEyLDcgKzc1Niw2IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTCiB2b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwg
U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhKQogewogICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNw
YWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENv
cHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFtX2lzRXBoZW1lcmFsKTsKICAgICAg
ICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0
aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KQEAgLTcyOSw3
ICs3NzIsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXAoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdAogICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgogICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdl
TmFtZXNwYWNlKTsKIAotICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRh
KSk7CisgICAgICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdl
dE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEpLCAhbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpOwogICAgICAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVu
ZXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOwogCiAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKQEAgLTc0OCw3ICs3OTEsNyBAQCB2b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLAogICAgICAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29u
bmVjdGlvbklEKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgUmVmPFN0
b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52YWx1ZTsKLSAgICAgICAgICAgIGlmICghYXJlYS0+aXNT
ZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICAgICAgaWYgKCFhcmVhLT5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJp
dHlPcmlnaW4oKS0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5z
ZWN1cml0eU9yaWdpbigpLmdldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc4
MCwxMCArODIzLDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxT
dG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKIHZvaWQgU3RvcmFnZU1hbmFn
ZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3Vy
aXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSkKIHsKICAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQg
PSBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlE
LCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCld
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgICAgICBt
X2VwaGVtZXJhbFN0b3JhZ2UuYWRkKHNlY3VyaXR5T3JpZ2luRGF0YSwgV2ViQ29yZTo6U3RvcmFn
ZU1hcDo6Y3JlYXRlKGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGEgbWVzc2FnZSBjaGVjay4KICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSk7CiAKQEAgLTgyOSw3ICs4NjgsNyBA
QCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0bwogICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUxpc3Rl
bmVyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKTsKIAogICAgICAgICAvLyBEb24ndCByZW1v
dmUgc2Vzc2lvbiBzdG9yYWdlIG1hcHMuIFRoZSB3ZWIgcHJvY2VzcyBtYXkgcmVjb25uZWN0IGFu
ZCBleHBlY3QgdGhlIGRhdGEgdG8gc3RpbGwgYmUgYXJvdW5kLgotICAgICAgICBpZiAoaXQtPnZh
bHVlLT5pc1Nlc3Npb25TdG9yYWdlKCkpCisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzRXBoZW1l
cmFsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKQEAgLTg0Nywx
NCArODg2LDExIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyhJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpCiB7CiAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9
IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2lu
RGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFwU2VlZCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQo
KSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICAg
ICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdl
TWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZGlkR2V0VmFsdWVzKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3Jh
Z2VNYXBJRCwgc3RvcmFnZU1hcC0+aXRlbXMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFn
ZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0
LgorCisgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdl
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgaWYgKCFz
dG9yYWdlQXJlYSkKICAgICAgICAgICAgIHJldHVybiBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5n
ZXQoKSwgc3RvcmFnZU1hcElELCB7IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfQorCiAgICAgICAgIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdl
TWFwSUQsIHN0b3JhZ2VBcmVhLT5pdGVtcygpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRH
ZXRWYWx1ZXMoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOwogICAgIH0pOwpAQCAtODY0
LDE3ICs5MDAsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2kKIHsKICAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9u
ID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmln
aW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQs
IHN0b3JhZ2VNYXBTZWVkLCBrZXkgPSBrZXkuaXNvbGF0ZWRDb3B5KCksIHZhbHVlID0gdmFsdWUu
aXNvbGF0ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29u
bmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkg
ewotICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRh
dGEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBz
ZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9z
ZWQuIElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFy
ZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisg
ICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
IAogICAgICAgICBib29sIHF1b3RhRXJyb3I7CiAgICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVt
KGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdmFsdWUs
IHVybFN0cmluZywgcXVvdGFFcnJvcik7CkBAIC04OTQsMTYgKzkyMywxMCBAQCB2b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29y
ZTo6U2VjdXJpdHlPcgogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBz
ZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0
b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIGtleSA9IGtl
eS5pc29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSgp
IG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShj
b25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVh
KSB7Ci0gICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2lu
RGF0YSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNz
aW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQu
IElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEg
Zm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAg
ICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAog
ICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBz
b3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIHVybFN0cmluZyk7CiAgICAgICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBT
ZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQpOwpAQCAtOTE0LDEyICs5MzcsMTAgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkQKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwg
c2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBz
dG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCB1cmxTdHJp
bmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8q
IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VN
YXBJRCk7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlmIChtX2lz
RXBoZW1lcmFsKQotICAgICAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1vdmUoc2Vj
dXJpdHlPcmlnaW5EYXRhKTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3Jh
Z2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBp
dC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFn
ZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgIGlmICgh
c3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBz
dG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFy
ZWFJRCwgdXJsU3RyaW5nKTsKICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3Rv
cmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKaW5kZXggYTg4ODMzMmVmY2ZiNTk0MTMwYjI2MDg4NDZhZjRhMTgyMTgyYjc5
MC4uMGEyNjcyZjFiMDU1N2ZiMjJkMTg3NTYyOGI3MWNlYjllZWNiMTFjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyLmgKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmPFdvcmtRdWV1ZT4g
bV9xdWV1ZTsKIAotICAgIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+IG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOworICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+PiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZXM7CiAKICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhPiwgUmVmUHRyPFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+IG1fdHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlczsKQEAgLTExMCw5ICsxMTAsNiBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4+
IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8SVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBt
X3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsKLQotICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhLCBSZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFn
ZTsKLSAgICBib29sIG1faXNFcGhlbWVyYWwgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYU1hcC5jcHAKaW5kZXggMGU5NDI5NjA0OWU2YzA4N2FiNmU4ZjBjNWViZmU0
YzFhMmUyYzA3OC4uY2ZjYzg2Mjg2ODMyY2Y0ODRlMTk0Mzc1OTkwY2U4YjJjNDk1MWY5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VB
cmVhTWFwLmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3Bh
dGNoU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0CiAg
ICAgICAgIGFwcGx5Q2hhbmdlKGtleSwgbmV3VmFsdWUpOwogICAgIH0KIAotICAgIGlmIChzdG9y
YWdlVHlwZSgpID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKQorICAgIGlmIChzdG9yYWdlVHlwZSgp
ID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uIHx8IHN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZVR5cGU6
OkVwaGVtZXJhbExvY2FsKQogICAgICAgICBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQoc291
cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0cmluZyk7CiAg
ICAgZWxzZQogICAgICAgICBkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50KHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpOwpAQCAtMzA3LDkgKzMw
Nyw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyQ2FjaGUoKQogCiB2b2lkIFN0b3JhZ2VB
cmVhTWFwOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQodWludDY0X3Qgc291cmNlU3RvcmFn
ZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIEFTU0VS
VChzdG9yYWdlVHlwZSgpID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKLQotICAgIC8vIE5hbWVz
cGFjZSBJRHMgZm9yIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVpdmFsZW50IHRv
IHdlYiBwYWdlIElEcworICAgIC8vIE5hbWVzcGFjZSBJRHMgZm9yIHNlc3Npb24gc3RvcmFnZSBu
YW1lc3BhY2VzIGFuZCBlcGhlbWVyYWwgbG9jYWwgc3RvcmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVp
dmFsZW50IHRvIHdlYiBwYWdlIElEcwogICAgIC8vIHNvIHdlIGNhbiBnZXQgdGhlIHJpZ2h0IHBh
Z2UgaGVyZS4KICAgICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
d2ViUGFnZShtYWtlT2JqZWN0SWRlbnRpZmllcjxQYWdlSWRlbnRpZmllclR5cGU+KG1fc3RvcmFn
ZU5hbWVzcGFjZUlEKSk7CiAgICAgaWYgKCF3ZWJQYWdlKQpAQCAtMzc3LDYgKzM3NSw3IEBAIHZv
aWQgU3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QoKQogCiAgICAgc3dpdGNoIChtX3N0b3JhZ2VUeXBl
KSB7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6
RXBoZW1lcmFsTG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWw6CiAg
ICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxPcmlnaW4gPSBtX3N0b3JhZ2VOYW1l
c3BhY2UtPnRvcExldmVsT3JpZ2luKCkpCiAgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcCht
X3N0b3JhZ2VNYXBJRCwgbV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwg
dG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgMCk7CkBA
IC0zODUsMTQgKzM4NCwxNCBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvbjoKICAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVTZXNzaW9uU3RvcmFn
ZU1hcChtX3N0b3JhZ2VNYXBJRCwgbV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNl
SUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgMCk7Ci0gICAgICAgIGlmIChtX3N0b3Jh
Z2VNYXApCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXI6OlNldEl0ZW1zKG1fc3RvcmFnZU1hcElELCBtX3N0b3JhZ2VNYXAtPml0ZW1zKCkpLCAw
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWw6
CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBpZiAobV9zdG9yYWdlTWFwKQorICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW1zKG1fc3RvcmFnZU1hcElE
LCBtX3N0b3JhZ2VNYXAtPml0ZW1zKCkpLCAwKTsKICAgICBtX2lzRGlzY29ubmVjdGVkID0gZmFs
c2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA3ZWE1ZTdkZDkwMjQyZTM2MGVm
MmYwOTliZGVlZTY3OWFjY2M1ZTQ3Li4xNmE4OTg0ZDk1MjRkNDQxOTFiMjE4NjMyY2U5OTBiYjBh
MGRiNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC00NywxMiArNDcsMTIgQEAgUmVm
PFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UodWkKIAogUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdl
TmFtZXNwYWNlSW1wbDo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2
NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKLSAgICByZXR1cm4gY3Jl
YXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoaWRlbnRpZmllciwgcXVvdGFJbkJ5dGVzKTsKKyAg
ICByZXR1cm4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGlkZW50aWZpZXIsIHF1b3RhSW5C
eXRlcywgdHJ1ZSk7CiB9CiAKLVJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVy
LCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCitSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRl
bnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzLCBib29sIGlzRXBoZW1lcmFsKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpM
b2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwoaXNFcGhlbWVyYWwgPyBTdG9yYWdlVHlw
ZTo6RXBoZW1lcmFsTG9jYWwgOiBTdG9yYWdlVHlwZTo6TG9jYWwsIGlkZW50aWZpZXIsIG51bGxw
dHIsIHF1b3RhSW5CeXRlcykpOwogfQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWlu
dDY0X3QgaWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsT3JpZ2lu
LCB1aW50NjRfdCBxdW90YUluQnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAppbmRleCA2NzU3ZTNi
ODE4ODg2YzRmZjU3YmMzZTc5ZjRjMTU4MDBmNzViMWJjLi4xM2FlOGI3YTM1ZGJiNTRhYzJhZDI3
Yjk1ZjExODE1YTc2ZWJhZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKQEAgLTQxLDcgKzQxLDcg
QEAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZU5h
bWVzcGFjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4g
Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWdu
ZWQgcXVvdGFJbkJ5dGVzKTsKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBj
cmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwg
dW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLSAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsPiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5z
aWduZWQgcXVvdGFJbkJ5dGVzKTsKKyAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBs
PiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWdu
ZWQgcXVvdGFJbkJ5dGVzLCBib29sIGlzRXBoZW1lcmFsID0gZmFsc2UpOwogICAgIHN0YXRpYyBS
ZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2
ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRlcyk7CiAKICAgICB2aXJ0dWFsIH5TdG9yYWdl
TmFtZXNwYWNlSW1wbCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDBmNGQwMzA2NWZmMzg2M2UxMzkzNjgxNmJlM2E4NzM2M2RiZDY2MmMuLjI5
ODQzZmYyNjdmZmZjZGEwMzFmMDNlOGEyY2M5NzYxMzU1YTFiZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0w
NS0yOCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBXS1dlYnNp
dGVEYXRhU3RvcmUgQVBJIGZhaWxzIHRvIGZldGNoIHdlYiBzdG9yYWdlIGRhdGEgZm9yIG5vbi1w
ZXJzaXN0ZW50IGRhdGEgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODMxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVE
YXRhc3RvcmUubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wNS0y
OCAgRGF2aWQgWGlvbmcgIDx3X3hpb25nQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTog
VXNpbmcgc3VkbyBvbiBpT1MgZGV2aWNlIGR1cmluZyB0aW1lb3V0IHNwaW5kdW1wcyAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0
YXN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNp
dGVEYXRhc3RvcmUubW0KaW5kZXggM2Y5NTNhNzA3NTE4ZmUzODIwNjczZWExMDMyMzQ2MGNiOTI5
NGQ0Ni4uMjQwNzViNzI1ZTA0ZGFlMzY2YWM5YjRmNTYwZmJhOGU5N2UwMmYyOSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3Rv
cmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNp
dGVEYXRhc3RvcmUubW0KQEAgLTMwNCw0ICszMDQsNDYgQEAgVEVTVChXS1dlYnNpdGVEYXRhU3Rv
cmUsIFJlbW92ZU5vblBlcnNpc3RlbnRDcmVkZW50aWFscykKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwogfQogCitURVNUKFdLV2Vic2l0ZURhdGFTdG9yZSwgRmV0Y2hOb25Q
ZXJzaXN0ZW50V2ViU3RvcmFnZSkKK3sKKyAgICBhdXRvIG5vblBlcnNpc3RlbnREYXRhU3RvcmUg
PSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOworICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7Cisg
ICAgW2NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpub25QZXJzaXN0ZW50RGF0YVN0
b3JlXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tOYXZpZ2F0aW9uVGVzdERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8c2NyaXB0PnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Nl
c3Npb24nLCAnc3RvcmFnZScpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2NhbCcsICdzdG9yYWdl
Jyk7PC9zY3JpcHQ+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2xvY2Fs
aG9zdCJdXTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0
aW9uXTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzZXNzaW9uJyki
IGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoW0Aic3RvcmFnZSIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAgICBy
ZWFkeVRvQ29udGludWUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0
SXRlbSgnbG9jYWwnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikg
eworICAgICAgICBFWFBFQ1RfVFJVRShbQCJzdG9yYWdlIiBpc0VxdWFsVG9TdHJpbmc6cmVzdWx0
XSk7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgcmVhZHlUb0NvbnRp
bnVlID0gZmFsc2U7CisgICAgW25vblBlcnNpc3RlbnREYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jk
c09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3Q6V0tXZWJzaXRlRGF0YVR5cGVTZXNzaW9uU3Rv
cmFnZV0gY29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4g
KmRhdGFSZWNvcmRzKSB7CisgICAgICAgIEVYUEVDVF9FUSgoaW50KWRhdGFSZWNvcmRzLmNvdW50
LCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1tbZGF0YVJlY29yZHMgb2JqZWN0QXRJbmRleDow
XSBkaXNwbGF5TmFtZV0gaXNFcXVhbFRvU3RyaW5nOkAibG9jYWxob3N0Il0pOworICAgICAgICBy
ZWFkeVRvQ29udGludWUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwor
ICAgIFtub25QZXJzaXN0ZW50RGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1Nl
dCBzZXRXaXRoT2JqZWN0OldLV2Vic2l0ZURhdGFUeXBlTG9jYWxTdG9yYWdlXSBjb21wbGV0aW9u
SGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqZGF0YVJlY29yZHMpIHsK
KyAgICAgICAgRVhQRUNUX0VRKChpbnQpZGF0YVJlY29yZHMuY291bnQsIDEpOworICAgICAgICBF
WFBFQ1RfVFJVRShbW1tkYXRhUmVjb3JkcyBvYmplY3RBdEluZGV4OjBdIGRpc3BsYXlOYW1lXSBp
c0VxdWFsVG9TdHJpbmc6QCJsb2NhbGhvc3QiXSk7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29u
dGludWUpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370897</attachid>
            <date>2019-05-29 16:43:41 -0700</date>
            <delta_ts>2019-05-30 16:41:34 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198317-20190529164341.patch</filename>
            <type>text/plain</type>
            <size>34196</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI0NjUxZDUzODU0N2M5YmRl
MDgyYmVkZGE3MTc3YmFmYzcwZTM4ODcuLjdmZTljNjIyMDdkMTAwZmE5ZDI2MWRjNDAxNTYzZmM3
Y2U1Zjg3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDUtMjkgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQ
SSBmYWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRh
IHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAg
IFVzZSBMb2NhbFN0b3JhZ2VOYW1lU3BhY2UgaW5zdGVhZCBvZiBTZXNzaW9uU3RvcmFnZU5hbWVT
cGFjZSBmb3IgbG9jYWxTdG9yYWdlIGluIGVwaGVtZXJhbCBzZXNzaW9uIG9yIAorICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQXJlYTo6aXNFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5l
ZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U6On5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VB
cmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjplcGhlbWVyYWxPcmlnaW5zIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xv
bmVUbyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFn
ZU9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9y
YWdlT3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JP
cmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3Rv
cmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2ll
bnRMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlU2Vzc2lvblN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6
ZGVzdHJveVN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0
VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQXJlYTo6aXNTZXNzaW9uU3RvcmFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oOgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTdG9y
YWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNz
aW9uU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5l
Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVFcGhl
bWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UpOgorCiAyMDE5LTA1LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Vha1B0ciBicmVha3MgdnRhYmxlcyB3aGVuIHVwY2FzdGluZyB0
byBiYXNlIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDAwMzk0NTA1M2Y1NTAzNGMy
MzA4N2U5MDc5OGJmOWI3ZGZiZTg2MjMuLjdhZjZmZDc2NWFhNmJlZmY3ODYzY2QxNmFhOGVhZjA1
MzM5ZWJjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKCkgY29uc3Q7CiAgICAg
dm9pZCBjbGVhcigpOwogCi0gICAgYm9vbCBpc1Nlc3Npb25TdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CisgICAgYm9vbCBpc0VwaGVtZXJhbCgpIGNv
bnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsgfQogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFjZSosIGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7CkBAIC03Miw3ICs3Miw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKIAotICAgIC8vIFdpbGwgYmUg
bnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9uZ3MgdG8gYSBzZXNzaW9uIHN0b3JhZ2UgbmFt
ZXNwYWNlLgorICAgIC8vIFdpbGwgYmUgbnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9uZ3Mg
dG8gYSBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlIG9yIHRoZSBzdG9yYWdlIGFyZWEgaXMgaW4g
YW4gZXBoZW1lcmFsIHNlc3Npb24uCiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBtX2xvY2Fs
U3RvcmFnZU5hbWVzcGFjZTsKICAgICBtdXRhYmxlIFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKICAgICBtdXRhYmxlIGJvb2wgbV9kaWRJbXBvcnRJ
dGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNlIH07CkBAIC05MSwxMiArOTEsMTYgQEAgcHVibGljOgog
CiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gJm1f
c3RvcmFnZU1hbmFnZXI7IH0KIAotICAgIFJlZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVTdG9y
YWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJik7CisgICAgZW51bSBjbGFzcyBJc0VwaGVtZXJh
bCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRPckNyZWF0ZVN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmLCBJc0VwaGVtZXJhbCk7CiAgICAgdm9pZCBk
aWREZXN0cm95U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWEqKTsKIAogICAgIHZvaWQgY2xlYXJTdG9y
YWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmKTsKICAgICB2
b2lkIGNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiBlcGhlbWVyYWxPcmlnaW5zKCkgY29uc3Q7CisgICAgdm9pZCBjbG9uZVRvKExvY2FsU3Rv
cmFnZU5hbWVzcGFjZSYgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKKwogcHJpdmF0ZToKICAg
ICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZU1hbmFnZXImLCB1aW50NjRfdCBzdG9yYWdl
TWFuYWdlcklEKTsKIApAQCAtMTA0LDggKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3Qg
bV9zdG9yYWdlTmFtZXNwYWNlSUQ7CiAgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7CiAKLSAg
ICAvLyBXZSBkb24ndCBob2xkIGFuIGV4cGxpY2l0IHJlZmVyZW5jZSB0byB0aGUgU3RvcmFnZUFy
ZWFzOyB0aGV5IGFyZSBrZXB0IGFsaXZlIGJ5IHRoZSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
biBtYXAgaW4gU3RvcmFnZU1hbmFnZXIuCi0gICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEs
IFN0b3JhZ2VBcmVhKj4gbV9zdG9yYWdlQXJlYU1hcDsKKyAgICBIYXNoTWFwPFNlY3VyaXR5T3Jp
Z2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYU1hcDsKIH07CiAKIC8v
IFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIvd2Vic3RvcmFnZS8jZGlzay1zcGFj
ZQpAQCAtMTk2LDcgKzE5OSw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjph
ZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3RpCiAKIHZvaWQgU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKQogewotICAgIEFT
U0VSVChpc1Nlc3Npb25TdG9yYWdlKCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKKyAgICBBU1NFUlQoaXNF
cGhlbWVyYWwoKSB8fCBtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSkpOwogICAgIG1fZXZlbnRMaXN0ZW5lcnMucmVtb3Zl
KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSk7CiB9CiAKQEAgLTIz
Niw3ICsyMzksMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OnNldEl0ZW0o
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWMKIAogdm9pZCBTdG9yYWdlTWFu
YWdlcjo6U3RvcmFnZUFyZWE6OnNldEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBpdGVtcykKIHsKLSAgICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpOworICAgIC8v
IEltcG9ydCBpdGVtcyBmcm9tIHdlYiBwcm9jZXNzIGlmIGl0ZW1zIGFyZSBub3Qgc3RvcmVkIG9u
IGRpc2suCisgICAgaWYgKCFpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm47CisKICAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAgICBTdHJpbmcgb2xkVmFsdWU7CiAgICAg
ICAgIGJvb2wgcXVvdGFFeGNlcHRpb247CkBAIC0zMTEsOSArMzE3LDEwIEBAIHZvaWQgU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVk
KCkgY29uc3QKICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2Vy
KCktPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKTsKICAgICAvLyBXZSBvcGVuIHRoZSBk
YXRhYmFzZSBoZXJlIGV2ZW4gaWYgd2UndmUgYWxyZWFkeSBpbXBvcnRlZCBvdXIgaXRlbXMgdG8g
ZW5zdXJlIHRoYXQgdGhlIGRhdGFiYXNlIGlzIG9wZW4gaWYgd2UgbmVlZCB0byB3cml0ZSB0byBp
dC4KICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKG1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX3F1ZXVlLmNvcHlSZWYoKSwgbV9sb2NhbFN0
b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLmNvcHlSZWYoKSwgbV9zZWN1cml0eU9yaWdpbik7CisgICAgICAgIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKG1fbG9jYWxTdG9yYWdl
TmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX3F1ZXVlLmNvcHlSZWYoKSwgKm1fbG9jYWxT
dG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX2xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlciwgbV9zZWN1cml0eU9yaWdpbik7CiAKICAgICBpZiAobV9kaWRJbXBvcnRJdGVtc0Zy
b21EYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzUwLDE0ICszNTcsMTMgQEAgU3RvcmFn
ZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0
b3JhZ2VNYW5hZ2VyJiBzdG8KIAogU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFj
ZTo6fkxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCiB7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFN
YXAuaXNFbXB0eSgpKTsKIH0KIAotYXV0byBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3Vy
aXR5T3JpZ2luKSAtPiBSZWY8U3RvcmFnZUFyZWE+CithdXRvIFN0b3JhZ2VNYW5hZ2VyOjpMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5E
YXRhJiYgc2VjdXJpdHlPcmlnaW4sIElzRXBoZW1lcmFsIGlzRXBoZW1lcmFsKSAtPiBSZWY8U3Rv
cmFnZUFyZWE+CiB7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBwcm90ZWN0ZWRTdG9yYWdlQXJl
YTsKICAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFNYXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBb
Jl0oKSBtdXRhYmxlIHsKLSAgICAgICAgcHJvdGVjdGVkU3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJl
YTo6Y3JlYXRlKHRoaXMsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7
CisgICAgICAgIHByb3RlY3RlZFN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZShpc0Vw
aGVtZXJhbCA9PSBJc0VwaGVtZXJhbDo6WWVzID8gbnVsbHB0ciA6IHRoaXMsIFdURk1vdmUoc2Vj
dXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7CiAgICAgICAgIHJldHVybiBwcm90ZWN0ZWRT
dG9yYWdlQXJlYS5nZXQoKTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC0zODMsMTAg
KzM4OSwyNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNs
ZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29ucwogCiB2b2lkIFN0b3JhZ2VNYW5hZ2Vy
OjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHsKLSAgICBm
b3IgKGF1dG8qIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKKyAgICBm
b3IgKGF1dG8gc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQogICAgICAg
ICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKIH0KIAorVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4g
U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6ZXBoZW1lcmFsT3JpZ2lucygp
IGNvbnN0Cit7CisgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICB9
CisgICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3Rv
cmFnZU5hbWVzcGFjZTo6Y2xvbmVUbyhMb2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2FsU3Rv
cmFnZU5hbWVzcGFjZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3N0b3JhZ2VBcmVhTWFw
KQorICAgICAgICBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UubV9zdG9yYWdlQXJlYU1hcC5hZGQo
cGFpci5rZXksIHBhaXIudmFsdWUtPmNsb25lKCkpOworfQorCiBjbGFzcyBTdG9yYWdlTWFuYWdl
cjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGUodW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKQEAgLTQ4
MywxMSArNTA1LDExIEBAIFJlZjxTdG9yYWdlTWFuYWdlcj4gU3RvcmFnZU1hbmFnZXI6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkKIAogU3RvcmFnZU1hbmFnZXI6
OlN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQogICAg
IDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlTWFu
YWdlciIpKQotICAgICwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSkpCi0gICAgLCBtX2lzRXBoZW1lcmFsKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc051
bGwoKSkKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGVuY29kaW5nIGlzIGluaXRpYWxpemVkIGJl
Zm9yZSB3ZSBzdGFydCBkaXNwYXRjaGluZyB0aGluZ3MgdG8gdGhlIHF1ZXVlLgogICAgIFVURjhF
bmNvZGluZygpOworICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAg
ICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlciA9IExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6Y3JlYXRlKG1fcXVldWUuY29weVJlZigpLCBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnkp
OwogfQogCiBTdG9yYWdlTWFuYWdlcjo6flN0b3JhZ2VNYW5hZ2VyKCkKQEAgLTU0OCw2ICs1NzAs
MTMgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHUKICAgICAgICAgQVNTRVJUKG5ld1Nlc3Npb25T
dG9yYWdlTmFtZXNwYWNlKTsKIAogICAgICAgICBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+Y2xv
bmVUbygqbmV3U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOworCisgICAgICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UgPSBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMuZ2V0KHN0b3JhZ2VOYW1l
c3BhY2VJRCkpIHsKKyAgICAgICAgICAgICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIG5ld2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKG5l
d1N0b3JhZ2VOYW1lc3BhY2VJRCk7CisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNw
YWNlLT5jbG9uZVRvKCpuZXdsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTYyOSw4ICs2NTgsMTUgQEAgdm9pZCBTdG9yYWdl
TWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2Vi
Q29yZTo6U2VjdXIKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4g
b3JpZ2luczsKIAotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG1fbG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkpCi0gICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4p
OworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPm9y
aWdpbnMoKSkKKyAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lU3Bh
Y2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IGxvY2FsU3RvcmFnZU5hbWVTcGFjZS0+ZXBoZW1lcmFsT3Jp
Z2lucygpKQorICAgICAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVz
KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogdHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5vcmlnaW5zKCkpCkBAIC02NDYsNyArNjgyLDkgQEAgdm9pZCBTdG9yYWdl
TWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2Vi
Q29yZTo6U2VjdXIKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRl
dGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpP
cmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBhdXRvIG9yaWdpbkRldGFpbHMgPSBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3Jp
Z2luRGV0YWlscygpOworICAgICAgICBWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpPcmlnaW5EZXRhaWxzPiBvcmlnaW5EZXRhaWxzOworICAgICAgICBpZiAobV9sb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXIpCisgICAgICAgICAgICBvcmlnaW5EZXRhaWxzID0gbV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXItPm9yaWdpbkRldGFpbHMoKTsKIAogICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW29yaWdpbkRldGFpbHMgPSBXVEZNb3ZlKG9yaWdpbkRldGFpbHMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5EZXRhaWxz
KSk7CkBAIC02NjMsMjMgKzcwMSwyOSBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YQogICAgICAg
ICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKICAgICAgICAgICAgIHRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb3Bp
ZWRPcmlnaW4pOwogCi0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxl
dGVEYXRhYmFzZVdpdGhPcmlnaW4oY29waWVkT3JpZ2luKTsKKyAgICAgICAgaWYgKG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyKQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihjb3BpZWRPcmlnaW4pOwogICAgIH0p
OwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5zTW9k
aWZpZWRTaW5jZShXYWxsVGltZSB0aW1lLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgdGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBt
X2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGF0YWJhc2VzTW9kaWZpZWRTaW5jZSh0aW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQotICAg
ICAgICAgICAgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VB
cmVhcygpOworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsKKyAg
ICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXItPmRhdGFiYXNlc01vZGlmaWVkU2luY2UodGltZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICAgICAgICAgIHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKIAot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnNUb0RlbGV0ZSkgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiBvcmlnaW5zVG9EZWxldGUpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxT
dG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKG9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VOYW1l
c3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCi0gICAgICAgICAgICAg
ICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2lu
KG9yaWdpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwpAQCAtNzAyLDcgKzc0Niw4IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKICAgICAgICAgICAg
ICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0
Y2hpbmdPcmlnaW4ob3JpZ2luKTsKIAotICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAg
aWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQorICAgICAgICAgICAgICAgIG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3JpZ2lu
KTsKICAgICAgICAgfQogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC03MTIsNyArNzU3LDYgQEAgdm9pZCBTdG9yYWdlTWFu
YWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlMKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRh
dGEpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdl
TWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlP
cmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBBU1NFUlQoIW1f
aXNFcGhlbWVyYWwpOwogICAgICAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb25JRCwg
c3RvcmFnZU1hcElEKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNz
YWdlIGNoZWNrLgpAQCAtNzI5LDcgKzc3Myw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0
ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCiAgICAgICAg
IEFTU0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOwogCi0gICAgICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92
ZShzZWN1cml0eU9yaWdpbkRhdGEpKTsKKyAgICAgICAgYXV0byBzdG9yYWdlQXJlYSA9IGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKHNlY3VyaXR5
T3JpZ2luRGF0YSksIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyID8gU3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6SXNFcGhlbWVyYWw6Ok5vIDogU3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6SXNFcGhlbWVyYWw6Olllcyk7CiAgICAgICAgIHN0
b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOwpAQCAt
NzQ4LDcgKzc5Miw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2Fs
U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAgICAgICAgICBpZiAo
aXQtPmtleS5maXJzdCAhPSBjb25uZWN0aW9uSUQpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBSZWY8U3RvcmFnZUFyZWE+IGFyZWEgPSAqaXQtPnZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFhcmVhLT5pc1Nlc3Npb25TdG9yYWdlKCkpCisgICAgICAgICAgICBpZiAoIWFy
ZWEtPmlzRXBoZW1lcmFsKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAoIW9yaWdpbi5zZWN1cml0eU9yaWdpbigpLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChhcmVh
LT5zZWN1cml0eU9yaWdpbigpLnNlY3VyaXR5T3JpZ2luKCkuZ2V0KCkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtNzgwLDEwICs4MjQsNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhKQog
ewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElE
LCBzdG9yYWdlTmFtZXNwYWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2lu
RGF0YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVy
YWwpIHsKLSAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5hZGQoc2VjdXJpdHlPcmlnaW5E
YXRhLCBXZWJDb3JlOjpTdG9yYWdlTWFwOjpjcmVhdGUobG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90
YUluQnl0ZXMpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgogICAgICAgICBBU1NFUlQobV9z
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMuaXNWYWxpZEtleShzdG9yYWdlTmFtZXNwYWNlSUQpKTsK
IApAQCAtODI5LDcgKzg2OSw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdl
TWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvCiAgICAgICAgIGl0
LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOwogCiAg
ICAgICAgIC8vIERvbid0IHJlbW92ZSBzZXNzaW9uIHN0b3JhZ2UgbWFwcy4gVGhlIHdlYiBwcm9j
ZXNzIG1heSByZWNvbm5lY3QgYW5kIGV4cGVjdCB0aGUgZGF0YSB0byBzdGlsbCBiZSBhcm91bmQu
Ci0gICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2Vzc2lvblN0b3JhZ2UoKSkKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+aXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXIpOwpAQCAtODQ3LDE0ICs4ODcsMTEgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0
VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmkK
IHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5E
YXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHN0
b3JhZ2VNYXBTZWVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdl
QXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICBpZiAoIXN0b3Jh
Z2VBcmVhKSB7Ci0gICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5
T3JpZ2luRGF0YSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWRHZXRWYWx1ZXMoY29u
bmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFwLT5pdGVtcygpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJl
ZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3Rv
cmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3Jl
IGl0LgorICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKQogICAgICAgICAgICAgcmV0dXJuIGRpZEdl
dFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHsgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9CisKICAgICAgICAgZGlkR2V0VmFsdWVzKGNvbm5l
Y3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZUFyZWEtPml0ZW1zKCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZhbHVlcyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJ
RCk7CiAgICAgfSk7CkBAIC04NjQsMTcgKzkwMSwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpz
ZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aQogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdp
bkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwg
c291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIGtleSA9IGtleS5pc29sYXRlZENv
cHkoKSwgdmFsdWUgPSB2YWx1ZS5pc29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0gdXJsU3RyaW5n
Lmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9
IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAg
ICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewot
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2Uu
Z2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOwotICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBx
dW90YUV4Y2VwdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBo
YXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorCisgICAgICAgIC8vIFRoaXMgaXMg
YSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQogCiAgICAgICAgIGJvb2wgcXVvdGFFcnJvcjsKICAgICAgICAg
c3RvcmFnZUFyZWEtPnNldEl0ZW0oY29ubmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3RvcmFn
ZUFyZWFJRCwga2V5LCB2YWx1ZSwgdXJsU3RyaW5nLCBxdW90YUVycm9yKTsKQEAgLTg5NCwxNiAr
OTI0LDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9IG1h
a2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0
YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzb3VyY2VTdG9yYWdlQXJlYUlELCBzdG9y
YWdlTWFwU2VlZCwga2V5ID0ga2V5Lmlzb2xhdGVkQ29weSgpLCB1cmxTdHJpbmcgPSB1cmxTdHJp
bmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVh
ID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7Ci0gICAg
ICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFn
ZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
b2xkVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5
LCBvbGRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorCisgICAgICAgIC8vIFRoaXMgaXMgYSBz
ZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9z
ZWQuIElnbm9yZSBpdC4KKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQogCiAgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5l
Y3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdXJsU3RyaW5nKTsK
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJl
bW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSksIHN0b3JhZ2VNYXBJRCk7CkBAIC05MTQsMTIg
KzkzOCwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRAogewogICAgIG1fcXVldWUtPmRpc3Bh
dGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb24gPSBt
YWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRh
dGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3Rv
cmFnZU1hcFNlZWQsIHVybFN0cmluZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVj
dGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewot
ICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpCi0gICAgICAgICAgICAgICAgbV9lcGhlbWVy
YWxTdG9yYWdlLnJlbW92ZShzZWN1cml0eU9yaWdpbkRhdGEpOwotICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBi
ZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorCisgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0
b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9y
ZSBpdC4KKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQogCiAgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcihjb25uZWN0aW9uLT51bmlxdWVJ
RCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1cmxTdHJpbmcpOwogICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkQ2xlYXIoc3RvcmFnZU1hcFNlZWQp
LCBzdG9yYWdlTWFwSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaAppbmRleCBhODg4MzMyZWZjZmI1OTQxMzBi
MjYwODg0NmFmNGExODIxODJiNzkwLi4wYTI2NzJmMWIwNTU3ZmIyMmQxODc1NjI4YjcxY2ViOWVl
Y2IxMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaApAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAK
ICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwogCi0gICAgUmVmPExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcj4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI7CisgICAgUmVmUHRyPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI7
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+IG1f
bG9jYWxTdG9yYWdlTmFtZXNwYWNlczsKIAogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90
LCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+LCBSZWZQdHI8VHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlPj4gbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzOwpAQCAtMTEw
LDkgKzExMCw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlPj4gbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXM7CiAKICAgICBI
YXNoTWFwPHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4sIFJl
ZlB0cjxTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uOwotCi0gICAgSGFz
aE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZjxXZWJDb3JlOjpTdG9yYWdlTWFw
Pj4gbV9lcGhlbWVyYWxTdG9yYWdlOwotICAgIGJvb2wgbV9pc0VwaGVtZXJhbCB7IGZhbHNlIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAppbmRleCAwZTk0Mjk2MDQ5
ZTZjMDg3YWI2ZThmMGM1ZWJmZTRjMWEyZTJjMDc4Li5kZDc0M2E5Zjk2OWM0ZGQwMTU2NTk5MTBi
ZDczNjVmOGI3ZWIzYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQodWludDY0X3Qgc291cmNlU3RvcmFn
ZUFyZWFJRCwgY29uc3QgU3QKICAgICAgICAgYXBwbHlDaGFuZ2Uoa2V5LCBuZXdWYWx1ZSk7CiAg
ICAgfQogCi0gICAgaWYgKHN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24pCisg
ICAgaWYgKHN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24gfHwgc3RvcmFnZVR5
cGUoKSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpCiAgICAgICAgIGRpc3BhdGNoU2Vz
c2lvblN0b3JhZ2VFdmVudChzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgdXJsU3RyaW5nKTsKICAgICBlbHNlCiAgICAgICAgIGRpc3BhdGNoTG9jYWxTdG9yYWdl
RXZlbnQoc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0
cmluZyk7CkBAIC0zMDcsOSArMzA3LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXJDYWNo
ZSgpCiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudCh1
aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZVR5cGU6OlNlc3Np
b24pOwotCi0gICAgLy8gTmFtZXNwYWNlIElEcyBmb3Igc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFj
ZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBhZ2UgSURzCisgICAgLy8gTmFtZXNwYWNlIElEcyBm
b3Igc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZXMgYW5kIGVwaGVtZXJhbCBsb2NhbCBzdG9yYWdl
IG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBhZ2UgSURzCiAgICAgLy8gc28gd2Ug
Y2FuIGdldCB0aGUgcmlnaHQgcGFnZSBoZXJlLgogICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKG1ha2VPYmplY3RJZGVudGlmaWVyPFBhZ2VJZGVu
dGlmaWVyVHlwZT4obV9zdG9yYWdlTmFtZXNwYWNlSUQpKTsKICAgICBpZiAoIXdlYlBhZ2UpCkBA
IC0zNzcsNiArMzc1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpCiAKICAgICBz
d2l0Y2ggKG1fc3RvcmFnZVR5cGUpIHsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2NhbDoKKyAg
ICBjYXNlIFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbDoKICAgICBjYXNlIFN0b3JhZ2VUeXBl
OjpUcmFuc2llbnRMb2NhbDoKICAgICAgICAgaWYgKFNlY3VyaXR5T3JpZ2luKiB0b3BMZXZlbE9y
aWdpbiA9IG1fc3RvcmFnZU5hbWVzcGFjZS0+dG9wTGV2ZWxPcmlnaW4oKSkKICAgICAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlVHJhbnNp
ZW50TG9jYWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBtX3N0b3JhZ2VOYW1lc3BhY2UtPnN0
b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdpbi0+ZGF0YSgpLCBtX3NlY3VyaXR5T3Jp
Z2luLT5kYXRhKCkpLCAwKTsKQEAgLTM4NSwxNCArMzg0LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFN
YXA6OmNvbm5lY3QoKQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNz
aW9uOgogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6
OkNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBtX3N0b3JhZ2VOYW1lc3Bh
Y2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCAwKTsK
LSAgICAgICAgaWYgKG1fc3RvcmFnZU1hcCkKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5k
KE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbXMobV9zdG9yYWdlTWFwSUQsIG1fc3Rv
cmFnZU1hcC0+aXRlbXMoKSksIDApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0b3JhZ2VU
eXBlOjpFcGhlbWVyYWxMb2NhbDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAobV9zdG9yYWdlTWFwKQorICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW1zKG1fc3RvcmFn
ZU1hcElELCBtX3N0b3JhZ2VNYXAtPml0ZW1zKCkpLCAwKTsKICAgICBtX2lzRGlzY29ubmVjdGVk
ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA3ZWE1ZTdkZDkwMjQy
ZTM2MGVmMmYwOTliZGVlZTY3OWFjY2M1ZTQ3Li5mNTljNzliN2ZhMmJlMmZjOWE3MjA1MmMxYjll
NTNjYjZhMzIzZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC00NywxMiArNDcsMTIg
QEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRl
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWkKIAogUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKLSAgICByZXR1
cm4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoaWRlbnRpZmllciwgcXVvdGFJbkJ5dGVz
KTsKKyAgICByZXR1cm4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGlkZW50aWZpZXIsIHF1
b3RhSW5CeXRlcywgSXNFcGhlbWVyYWw6Olllcyk7CiB9CiAKLVJlZjxTdG9yYWdlTmFtZXNwYWNl
SW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1
aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCitSZWY8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzLCBJc0VwaGVt
ZXJhbCBpc0VwaGVtZXJhbCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFt
ZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6TG9jYWwsIGlkZW50aWZpZXIsIG51bGxwdHIsIHF1b3Rh
SW5CeXRlcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
KGlzRXBoZW1lcmFsID09IElzRXBoZW1lcmFsOjpZZXMgPyBTdG9yYWdlVHlwZTo6RXBoZW1lcmFs
TG9jYWwgOiBTdG9yYWdlVHlwZTo6TG9jYWwsIGlkZW50aWZpZXIsIG51bGxwdHIsIHF1b3RhSW5C
eXRlcykpOwogfQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRp
ZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsT3JpZ2luLCB1aW50NjRfdCBx
dW90YUluQnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAppbmRleCA2NzU3ZTNiODE4ODg2YzRmZjU3
YmMzZTc5ZjRjMTU4MDBmNzViMWJjLi5lYTZkNTUxOGNkZmM5OWRjM2EwMWQ4NTdlMzY2MzY1MGY5
YjY2NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKQEAgLTQxLDcgKzQxLDkgQEAgY2xhc3MgU3Rv
cmFnZU5hbWVzcGFjZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gY3JlYXRlU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5
dGVzKTsKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVFcGhlbWVy
YWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVv
dGFJbkJ5dGVzKTsKLSAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJ
bkJ5dGVzKTsKKworICAgIGVudW0gY2xhc3MgSXNFcGhlbWVyYWwgOiBib29sIHsgTm8sIFllcyB9
OworICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUxvY2FsU3RvcmFn
ZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMsIElz
RXBoZW1lcmFsIGlzRXBoZW1lcmFsKTsKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRp
ZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsT3JpZ2luLCB1aW50NjRfdCBx
dW90YUluQnl0ZXMpOwogCiAgICAgdmlydHVhbCB+U3RvcmFnZU5hbWVzcGFjZUltcGwoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1dlYlN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFn
ZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCmluZGV4IDlhNmI2ZjM3MDBhMGI5NTg1
MWRlYTgxMDZmY2JiMzJhNGIzMDczZjEuLjFmYTBhY2UxNTRkNDNlYjk1OGNkY2UzZWM5NTZjZjAx
YTg5ZWI5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcApAQCAtNzcs
NyArNzcsNyBAQCBSZWY8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyOjpjcmVhdGVFcGhlbWVyYWxMb2NhbAogCiBSZWY8V2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZT4gV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCiB7Ci0gICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UobV9pZGVudGlmaWVyLCBxdW90YSk7
CisgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UobV9pZGVudGlmaWVyLCBxdW90YSwgU3RvcmFnZU5hbWVzcGFjZUltcGw6OklzRXBoZW1l
cmFsOjpZZXMpOwogfQogCiBSZWY8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uo
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsT3JpZ2luLCB1bnNpZ25lZCBxdW90YSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTYx
NGMxZjQ3MjNmNTY2OGNiMTg0ZmZhYjczOWYzMjQ1NzJmNDg1Li5hMmFhZDkzYmU0ODM4NzQyOGM0
MGE5NTM4ZjdmYjY1MzliOTZmNGFjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDUtMjkgIFNpaHVpIExpdSAg
PHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQSSBm
YWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRhIHN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgz
MTcKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3RvcmUubW06Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wNS0yOSAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYWtQdHIgYnJlYWtzIHZ0YWJsZXMg
d2hlbiB1cGNhc3RpbmcgdG8gYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2Vic2l0ZURhdGFzdG9yZS5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tCmluZGV4
IDNmOTUzYTcwNzUxOGZlMzgyMDY3M2VhMTAzMjM0NjBjYjkyOTRkNDYuLjI0MDc1YjcyNWUwNGRh
ZTM2NmFjOWI0ZjU2MGZiYThlOTdlMDJmMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tCkBAIC0z
MDQsNCArMzA0LDQ2IEBAIFRFU1QoV0tXZWJzaXRlRGF0YVN0b3JlLCBSZW1vdmVOb25QZXJzaXN0
ZW50Q3JlZGVudGlhbHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0K
IAorVEVTVChXS1dlYnNpdGVEYXRhU3RvcmUsIEZldGNoTm9uUGVyc2lzdGVudFdlYlN0b3JhZ2Up
Cit7CisgICAgYXV0byBub25QZXJzaXN0ZW50RGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9y
ZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOworICAgIFtjb25maWd1cmF0aW9uIHNl
dFdlYnNpdGVEYXRhU3RvcmU6bm9uUGVyc2lzdGVudERhdGFTdG9yZV07CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbTmF2aWdhdGlvblRlc3RE
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0
ZTpuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
OkAiPHNjcmlwdD5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdzZXNzaW9uJywgJ3N0b3JhZ2UnKTts
b2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9jYWwnLCAnc3RvcmFnZScpOzwvc2NyaXB0PiIgYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9sb2NhbGhvc3QiXV07CisgICAgW25hdmln
YXRpb25EZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisKKyAgICByZWFkeVRv
Q29udGludWUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5k
b3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc2Vzc2lvbicpIiBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkIHJlc3VsdCwgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFtAInN0b3JhZ2Ui
IGlzRXF1YWxUb1N0cmluZzpyZXN1bHRdKTsKKyAgICAgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51
ZSk7CisKKyAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0
ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvY2FsJykiIGNvbXBs
ZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUoW0Aic3RvcmFnZSIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAgICByZWFkeVRv
Q29udGludWUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVhZHlUb0NvbnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFtu
b25QZXJzaXN0ZW50RGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRX
aXRoT2JqZWN0OldLV2Vic2l0ZURhdGFUeXBlU2Vzc2lvblN0b3JhZ2VdIGNvbXBsZXRpb25IYW5k
bGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICpkYXRhUmVjb3JkcykgeworICAg
ICAgICBFWFBFQ1RfRVEoKGludClkYXRhUmVjb3Jkcy5jb3VudCwgMSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKFtbW2RhdGFSZWNvcmRzIG9iamVjdEF0SW5kZXg6MF0gZGlzcGxheU5hbWVdIGlzRXF1
YWxUb1N0cmluZzpAImxvY2FsaG9zdCJdKTsKKyAgICAgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51
ZSk7CisKKyAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKKyAgICBbbm9uUGVyc2lzdGVudERh
dGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdDpXS1dl
YnNpdGVEYXRhVHlwZUxvY2FsU3RvcmFnZV0gY29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdL
V2Vic2l0ZURhdGFSZWNvcmQgKj4gKmRhdGFSZWNvcmRzKSB7CisgICAgICAgIEVYUEVDVF9FUSgo
aW50KWRhdGFSZWNvcmRzLmNvdW50LCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1tbZGF0YVJl
Y29yZHMgb2JqZWN0QXRJbmRleDowXSBkaXNwbGF5TmFtZV0gaXNFcXVhbFRvU3RyaW5nOkAibG9j
YWxob3N0Il0pOworICAgICAgICByZWFkeVRvQ29udGludWUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370995</attachid>
            <date>2019-05-30 16:41:36 -0700</date>
            <delta_ts>2019-05-30 18:36:23 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198317-20190530164135.patch</filename>
            <type>text/plain</type>
            <size>34338</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYxMTRjYjA5YmQwYWQxNTU3
Yjc5MzJhZGRlNTJkZGYxZWQzNjdmMmQuLjdlYzI3ZGYzNDkzZDlmYjYxODdjOWM2NGMwYTJkOGMy
NDU4NTZlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDUtMzAgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQ
SSBmYWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRh
IHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAg
IFVzZSBMb2NhbFN0b3JhZ2VOYW1lU3BhY2UgaW5zdGVhZCBvZiBTZXNzaW9uU3RvcmFnZU5hbWVT
cGFjZSBmb3IgbG9jYWxTdG9yYWdlIGluIGVwaGVtZXJhbCBzZXNzaW9uIG9yIAorICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQXJlYTo6aXNFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5l
ZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U6On5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VB
cmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjplcGhlbWVyYWxPcmlnaW5zIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xv
bmVUbyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFn
ZU9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9y
YWdlT3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JP
cmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3Rv
cmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2ll
bnRMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlU2Vzc2lvblN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6
ZGVzdHJveVN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0
VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQXJlYTo6aXNTZXNzaW9uU3RvcmFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oOgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTdG9y
YWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNz
aW9uU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5l
Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVFcGhl
bWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UpOgorCiAyMDE5LTA1LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIE1pc3NpbmcgY2FyZXQgd2hlbiBmb2N1c2luZyBhbiBlZGl0
YWJsZSBmaWVsZCBpZiB0aGUgc2VsZWN0aW9uIHdhcyBzZXQgd2hlbiBXS1dlYlZpZXcgd2Fzbid0
IGZpcnN0IHJlc3BvbmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggMDAzOTQ1MDUzZjU1MDM0
YzIzMDg3ZTkwNzk4YmY5YjdkZmJlODYyMy4uN2FmNmZkNzY1YWE2YmVmZjc4NjNjZDE2YWE4ZWFm
MDUzMzllYmNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMoKSBjb25zdDsKICAg
ICB2b2lkIGNsZWFyKCk7CiAKLSAgICBib29sIGlzU2Vzc2lvblN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiAhbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7IH0KKyAgICBib29sIGlzRXBoZW1lcmFsKCkg
Y29uc3QgeyByZXR1cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgU3RvcmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiwgY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKQEAgLTcyLDcgKzcyLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwogCi0gICAgLy8gV2lsbCBi
ZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVsb25ncyB0byBhIHNlc3Npb24gc3RvcmFnZSBu
YW1lc3BhY2UuCisgICAgLy8gV2lsbCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVsb25n
cyB0byBhIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2Ugb3IgdGhlIHN0b3JhZ2UgYXJlYSBpcyBp
biBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIG1fbG9j
YWxTdG9yYWdlTmFtZXNwYWNlOwogICAgIG11dGFibGUgUmVmUHRyPExvY2FsU3RvcmFnZURhdGFi
YXNlPiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlOwogICAgIG11dGFibGUgYm9vbCBtX2RpZEltcG9y
dEl0ZW1zRnJvbURhdGFiYXNlIHsgZmFsc2UgfTsKQEAgLTkxLDEyICs5MSwxNiBAQCBwdWJsaWM6
CiAKICAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiAm
bV9zdG9yYWdlTWFuYWdlcjsgfQogCi0gICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRPckNyZWF0ZVN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKKyAgICBlbnVtIGNsYXNzIElzRXBoZW1l
cmFsIDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICBSZWY8U3RvcmFnZUFyZWE+IGdldE9yQ3JlYXRl
U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYsIElzRXBoZW1lcmFsKTsKICAgICB2b2lk
IGRpZERlc3Ryb3lTdG9yYWdlQXJlYShTdG9yYWdlQXJlYSopOwogCiAgICAgdm9pZCBjbGVhclN0
b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYpOwogICAg
IHZvaWQgY2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKIAorICAgIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+IGVwaGVtZXJhbE9yaWdpbnMoKSBjb25zdDsKKyAgICB2b2lkIGNsb25lVG8oTG9jYWxT
dG9yYWdlTmFtZXNwYWNlJiBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworCiBwcml2YXRlOgog
ICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlTWFuYWdlciYsIHVpbnQ2NF90IHN0b3Jh
Z2VNYW5hZ2VySUQpOwogCkBAIC0xMDQsOCArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRf
dCBtX3N0b3JhZ2VOYW1lc3BhY2VJRDsKICAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlczsKIAot
ICAgIC8vIFdlIGRvbid0IGhvbGQgYW4gZXhwbGljaXQgcmVmZXJlbmNlIHRvIHRoZSBTdG9yYWdl
QXJlYXM7IHRoZXkgYXJlIGtlcHQgYWxpdmUgYnkgdGhlIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0
aW9uIG1hcCBpbiBTdG9yYWdlTWFuYWdlci4KLSAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0
YSwgU3RvcmFnZUFyZWEqPiBtX3N0b3JhZ2VBcmVhTWFwOworICAgIEhhc2hNYXA8U2VjdXJpdHlP
cmlnaW5EYXRhLCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhTWFwOwogfTsKIAog
Ly8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNw
YWNlCkBAIC0xOTYsNyArMTk5LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6
OmFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGkKIAogdm9pZCBT
dG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgY29ubmVjdGlvbklELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCiB7Ci0gICAg
QVNTRVJUKGlzU2Vzc2lvblN0b3JhZ2UoKSB8fCBtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKHN0
ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSkpOworICAgIEFTU0VSVChp
c0VwaGVtZXJhbCgpIHx8IG1fZXZlbnRMaXN0ZW5lcnMuY29udGFpbnMoc3RkOjptYWtlX3BhaXIo
Y29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKSk7CiAgICAgbV9ldmVudExpc3RlbmVycy5yZW1v
dmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKTsKIH0KIApAQCAt
MjM2LDcgKzIzOSwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6c2V0SXRl
bShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lYwogCiB2b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpTdG9yYWdlQXJlYTo6c2V0SXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGl0ZW1zKQogewotICAgIEFTU0VSVCghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSk7CisgICAg
Ly8gSW1wb3J0IGl0ZW1zIGZyb20gd2ViIHByb2Nlc3MgaWYgaXRlbXMgYXJlIG5vdCBzdG9yZWQg
b24gZGlzay4KKyAgICBpZiAoIWlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKICAg
ICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKQEAgLTMxMSw5ICszMTcsMTAgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVk
ZWQoKSBjb25zdAogICAgIGlmICghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIEFTU0VSVChtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFn
ZXIoKS0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpOwogICAgIC8vIFdlIG9wZW4gdGhl
IGRhdGFiYXNlIGhlcmUgZXZlbiBpZiB3ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91ciBpdGVtcyB0
byBlbnN1cmUgdGhhdCB0aGUgZGF0YWJhc2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRvIHdyaXRlIHRv
IGl0LgogICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZSA9IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9sb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fcXVldWUuY29weVJlZigpLCBtX2xvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIuY29weVJlZigpLCBtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgbV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZSA9IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9sb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fcXVldWUuY29weVJlZigpLCAqbV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLCBtX3NlY3VyaXR5T3JpZ2luKTsKIAogICAgIGlmIChtX2RpZEltcG9ydEl0ZW1z
RnJvbURhdGFiYXNlKQogICAgICAgICByZXR1cm47CkBAIC0zNTAsMTQgKzM1NywxMyBAQCBTdG9y
YWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uo
U3RvcmFnZU1hbmFnZXImIHN0bwogCiBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNw
YWNlOjp+TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCkKIHsKLSAgICBBU1NFUlQobV9zdG9yYWdlQXJl
YU1hcC5pc0VtcHR5KCkpOwogfQogCi1hdXRvIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VO
YW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2Vj
dXJpdHlPcmlnaW4pIC0+IFJlZjxTdG9yYWdlQXJlYT4KK2F1dG8gU3RvcmFnZU1hbmFnZXI6Okxv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
bkRhdGEmJiBzZWN1cml0eU9yaWdpbiwgSXNFcGhlbWVyYWwgaXNFcGhlbWVyYWwpIC0+IFJlZjxT
dG9yYWdlQXJlYT4KIHsKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHByb3RlY3RlZFN0b3JhZ2VB
cmVhOwogICAgIHJldHVybiAqbV9zdG9yYWdlQXJlYU1hcC5lbnN1cmUoc2VjdXJpdHlPcmlnaW4s
IFsmXSgpIG11dGFibGUgewotICAgICAgICBwcm90ZWN0ZWRTdG9yYWdlQXJlYSA9IFN0b3JhZ2VB
cmVhOjpjcmVhdGUodGhpcywgV1RGTW92ZShzZWN1cml0eU9yaWdpbiksIG1fcXVvdGFJbkJ5dGVz
KTsKKyAgICAgICAgcHJvdGVjdGVkU3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlKGlz
RXBoZW1lcmFsID09IElzRXBoZW1lcmFsOjpZZXMgPyBudWxscHRyIDogdGhpcywgV1RGTW92ZShz
ZWN1cml0eU9yaWdpbiksIG1fcXVvdGFJbkJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHByb3RlY3Rl
ZFN0b3JhZ2VBcmVhLmdldCgpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KQEAgLTM4Mywx
MCArMzg5LDI2IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zCiAKIHZvaWQgU3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogewotICAg
IGZvciAoYXV0byogc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQorICAg
IGZvciAoYXV0byBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCiAgICAg
ICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigpOwogfQogCitWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRh
PiBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjplcGhlbWVyYWxPcmlnaW5z
KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOworICAg
IGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygp
KSB7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOworICAg
IH0KKyAgICByZXR1cm4gb3JpZ2luczsKK30KKwordm9pZCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxT
dG9yYWdlTmFtZXNwYWNlOjpjbG9uZVRvKExvY2FsU3RvcmFnZU5hbWVzcGFjZSYgbmV3TG9jYWxT
dG9yYWdlTmFtZXNwYWNlKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IG1fc3RvcmFnZUFyZWFN
YXApCisgICAgICAgIG5ld0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5tX3N0b3JhZ2VBcmVhTWFwLmFk
ZChwYWlyLmtleSwgcGFpci52YWx1ZS0+Y2xvbmUoKSk7Cit9CisKIGNsYXNzIFN0b3JhZ2VNYW5h
Z2VyOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZSh1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwpAQCAt
NDgzLDExICs1MDUsMTEgQEAgUmVmPFN0b3JhZ2VNYW5hZ2VyPiBTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQogCiBTdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZU1hbmFnZXIoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCiAg
ICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2VN
YW5hZ2VyIikpCi0gICAgLCBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcihMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXI6OmNyZWF0ZShtX3F1ZXVlLmNvcHlSZWYoKSwgbG9jYWxTdG9yYWdl
RGlyZWN0b3J5KSkKLSAgICAsIG1faXNFcGhlbWVyYWwobG9jYWxTdG9yYWdlRGlyZWN0b3J5Lmlz
TnVsbCgpKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZW5jb2RpbmcgaXMgaW5pdGlhbGl6ZWQg
YmVmb3JlIHdlIHN0YXJ0IGRpc3BhdGNoaW5nIHRoaW5ncyB0byB0aGUgcXVldWUuCiAgICAgVVRG
OEVuY29kaW5nKCk7CisgICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisg
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyID0gTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSk7CiB9CiAKIFN0b3JhZ2VNYW5hZ2VyOjp+U3RvcmFnZU1hbmFnZXIoKQpAQCAtNTQ4LDYgKzU3
MCwxMyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgdQogICAgICAgICBBU1NFUlQobmV3U2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UpOwogCiAgICAgICAgIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5j
bG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CisKKyAgICAgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikgeworICAgICAgICAgICAgaWYgKGF1dG8qIGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSA9IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy5nZXQoc3RvcmFnZU5h
bWVzcGFjZUlEKSkgeworICAgICAgICAgICAgICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbmV3
bG9jYWxTdG9yYWdlTmFtZXNwYWNlID0gZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uo
bmV3U3RvcmFnZU5hbWVzcGFjZUlEKTsKKyAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VOYW1l
c3BhY2UtPmNsb25lVG8oKm5ld2xvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtNjI5LDggKzY1OCwxNSBAQCB2b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cgogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRh
PiBvcmlnaW5zOwogCi0gICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXItPm9yaWdpbnMoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdp
bik7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikgeworICAgICAg
ICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+
b3JpZ2lucygpKQorICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdpbik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVT
cGFjZSA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogbG9jYWxTdG9yYWdlTmFtZVNwYWNlLT5lcGhlbWVyYWxP
cmlnaW5zKCkpCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdpbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1
ZXMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiB0cmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UtPm9yaWdpbnMoKSkKQEAgLTY0Niw3ICs2ODIsOSBAQCB2b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cgogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lu
RGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6
Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGF1dG8gb3JpZ2luRGV0YWlscyA9IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5v
cmlnaW5EZXRhaWxzKCk7CisgICAgICAgIFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6Ok9yaWdpbkRldGFpbHM+IG9yaWdpbkRldGFpbHM7CisgICAgICAgIGlmIChtX2xvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcikKKyAgICAgICAgICAgIG9yaWdpbkRldGFpbHMgPSBtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2luRGV0YWlscygpOwogCiAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbb3JpZ2luRGV0YWlscyA9IFdURk1vdmUob3JpZ2luRGV0YWls
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbkRldGFp
bHMpKTsKQEAgLTY2MywyMyArNzAxLDI5IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxv
Y2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhCiAgICAg
ICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICAgICAgdHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNv
cGllZE9yaWdpbik7CiAKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPmRl
bGV0ZURhdGFiYXNlV2l0aE9yaWdpbihjb3BpZWRPcmlnaW4pOworICAgICAgICBpZiAobV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKGNvcGllZE9yaWdpbik7CiAgICAg
fSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbnNN
b2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCB0aW1lLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9
IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kYXRhYmFzZXNNb2RpZmllZFNpbmNlKHRp
bWUpOwotICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCi0g
ICAgICAgICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFn
ZUFyZWFzKCk7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikgewor
ICAgICAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBtX2xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlci0+ZGF0YWJhc2VzTW9kaWZpZWRTaW5jZSh0aW1lKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgICAgICAgICAg
dHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VBcmVhcygpOwog
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2luc1RvRGVsZXRlKSB7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnNUb0RlbGV0ZSkgewor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICAgICAgICAgICAgICBsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4ob3JpZ2luKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG9yaWdpbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2FsU3RvcmFnZU5h
bWVzcGFjZSA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKLSAgICAgICAgICAg
ICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmln
aW4ob3JpZ2luKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOworICAgICAgICAg
ICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CkBAIC03MDIsNyArNzQ2LDggQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6
ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlMKICAgICAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
IDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQogICAgICAgICAg
ICAgICAgIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNN
YXRjaGluZ09yaWdpbihvcmlnaW4pOwogCi0gICAgICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG9yaWdpbik7CisgICAgICAgICAg
ICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpCisgICAgICAgICAgICAgICAgbV9s
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmln
aW4pOwogICAgICAgICB9CiAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcxMiw3ICs3NTcsNiBAQCB2b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Uwogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2lu
RGF0YSkKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3Jh
Z2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlELCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0
eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9pc0VwaGVtZXJhbCk7CiAgICAgICAgIHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIoY29ubmVjdGlvbklE
LCBzdG9yYWdlTWFwSUQpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1l
c3NhZ2UgY2hlY2suCkBAIC03MjksNyArNzczLDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlTG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KICAgICAg
ICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CiAKLSAgICAgICAgYXV0byBzdG9yYWdl
QXJlYSA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZN
b3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSkpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbG9j
YWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2VjdXJp
dHlPcmlnaW5EYXRhKSwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIgPyBTdG9yYWdlTWFu
YWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpJc0VwaGVtZXJhbDo6Tm8gOiBTdG9yYWdlTWFu
YWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpJc0VwaGVtZXJhbDo6WWVzKTsKICAgICAgICAg
c3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKTsKIAog
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShzdG9yYWdlQXJlYSk7CkBA
IC03NDgsNyArNzkyLDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9j
YWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICAgICAgICAgIGlm
IChpdC0+a2V5LmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIFJlZjxTdG9yYWdlQXJlYT4gYXJlYSA9ICppdC0+dmFsdWU7Ci0gICAg
ICAgICAgICBpZiAoIWFyZWEtPmlzU2Vzc2lvblN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGlmICgh
YXJlYS0+aXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGlmICghb3JpZ2luLnNlY3VyaXR5T3JpZ2luKCktPmlzU2FtZVNjaGVtZUhvc3RQb3J0KGFy
ZWEtPnNlY3VyaXR5T3JpZ2luKCkuc2VjdXJpdHlPcmlnaW4oKS5nZXQoKSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC03ODAsMTAgKzgyNCw2IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU1hcChJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3Rv
cmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEp
CiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFw
SUQsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmln
aW5EYXRhLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9pc0VwaGVt
ZXJhbCkgewotICAgICAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdp
bkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1
b3RhSW5CeXRlcykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCiAgICAgICAgIEFTU0VSVCht
X3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkp
OwogCkBAIC04MjksNyArODY5LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVN0b3Jh
Z2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG8KICAgICAgICAg
aXQtPnZhbHVlLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAK
ICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIHNlc3Npb24gc3RvcmFnZSBtYXBzLiBUaGUgd2ViIHBy
b2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhwZWN0IHRoZSBkYXRhIHRvIHN0aWxsIGJlIGFyb3Vu
ZC4KLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5pc0VwaGVtZXJhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFn
ZU1hcElEUGFpcik7CkBAIC04NDcsMTQgKzg4NywxMSBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpn
ZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9y
aQogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdp
bkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwg
c3RvcmFnZU1hcFNlZWQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3Jh
Z2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7Ci0gICAgICAgIGlmICghc3Rv
cmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJp
dHlPcmlnaW5EYXRhKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZEdldFZhbHVlcyhj
b25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VNYXAtPml0ZW1zKCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBz
dG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25v
cmUgaXQuCisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm4gZGlk
R2V0VmFsdWVzKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCwgeyB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0KKwogICAgICAgICBkaWRHZXRWYWx1ZXMoY29u
bmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlQXJlYS0+aXRlbXMoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpTdG9yYWdlQXJlYU1hcDo6RGlkR2V0VmFsdWVzKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1h
cElEKTsKICAgICB9KTsKQEAgLTg2NCwxNyArOTAxLDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3Jp
Z2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElE
LCBzb3VyY2VTdG9yYWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5ID0ga2V5Lmlzb2xhdGVk
Q29weSgpLCB2YWx1ZSA9IHZhbHVlLmlzb2xhdGVkQ29weSgpLCB1cmxTdHJpbmcgPSB1cmxTdHJp
bmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVh
ID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7Ci0gICAg
ICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFn
ZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
b2xkVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgcXVvdGFFeGNlcHRpb247Ci0gICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUs
IHF1b3RhRXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0
IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisKKyAgICAgICAgLy8gVGhpcyBp
cyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVu
IGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9CiAKICAgICAgICAgYm9vbCBxdW90YUVycm9yOwogICAgICAg
ICBzdG9yYWdlQXJlYS0+c2V0SXRlbShjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBzb3VyY2VTdG9y
YWdlQXJlYUlELCBrZXksIHZhbHVlLCB1cmxTdHJpbmcsIHF1b3RhRXJyb3IpOwpAQCAtODk0LDE2
ICs5MjQsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3IKIHsKICAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0g
bWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5E
YXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0
b3JhZ2VNYXBTZWVkLCBrZXkgPSBrZXkuaXNvbGF0ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0
cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZUFy
ZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAg
ICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9y
YWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyBvbGRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShr
ZXksIG9sZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhh
cyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisKKyAgICAgICAgLy8gVGhpcyBpcyBh
IHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNs
b3NlZC4gSWdub3JlIGl0LgorICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CiAKICAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oY29u
bmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCB1cmxTdHJpbmcp
OwogICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlk
UmVtb3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwga2V5KSwgc3RvcmFnZU1hcElEKTsKQEAgLTkxNCwx
MiArOTM4LDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5ECiB7CiAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9
IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2lu
RGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzb3VyY2VTdG9yYWdlQXJlYUlELCBz
dG9yYWdlTWFwU2VlZCwgdXJsU3RyaW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSgpIG11
dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25u
ZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7
Ci0gICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkKLSAgICAgICAgICAgICAgICBtX2VwaGVt
ZXJhbFN0b3JhZ2UucmVtb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSk7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5
IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24g
c3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdu
b3JlIGl0LgorICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CiAKICAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24tPnVuaXF1
ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVybFN0cmluZyk7CiAgICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2Vl
ZCksIHN0b3JhZ2VNYXBJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4IGE4ODgzMzJlZmNmYjU5NDEz
MGIyNjA4ODQ2YWY0YTE4MjE4MmI3OTAuLjBhMjY3MmYxYjA1NTdmYjIyZDE4NzU2MjhiNzFjZWI5
ZWVjYjExYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToK
IAogICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CiAKLSAgICBSZWY8TG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyPiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjsKKyAgICBSZWZQdHI8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPj4g
bV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0
X3QsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4sIFJlZlB0cjxUcmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U+PiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXM7CkBAIC0x
MTAsOSArMTEwLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2U+PiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlczsKIAogICAg
IEhhc2hNYXA8c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90Piwg
UmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb247Ci0KLSAgICBI
YXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmPFdlYkNvcmU6OlN0b3JhZ2VN
YXA+PiBtX2VwaGVtZXJhbFN0b3JhZ2U7Ci0gICAgYm9vbCBtX2lzRXBoZW1lcmFsIHsgZmFsc2Ug
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmluZGV4IDBlOTQyOTYw
NDllNmMwODdhYjZlOGYwYzVlYmZlNGMxYTJlMmMwNzguLmRkNzQzYTlmOTY5YzRkZDAxNTY1OTkx
MGJkNzM2NWY4YjdlYjNiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lk
IFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCh1aW50NjRfdCBzb3VyY2VTdG9y
YWdlQXJlYUlELCBjb25zdCBTdAogICAgICAgICBhcHBseUNoYW5nZShrZXksIG5ld1ZhbHVlKTsK
ICAgICB9CiAKLSAgICBpZiAoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbikK
KyAgICBpZiAoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbiB8fCBzdG9yYWdl
VHlwZSgpID09IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCkKICAgICAgICAgZGlzcGF0Y2hT
ZXNzaW9uU3RvcmFnZUV2ZW50KHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgb2xkVmFsdWUsIG5l
d1ZhbHVlLCB1cmxTdHJpbmcpOwogICAgIGVsc2UKICAgICAgICAgZGlzcGF0Y2hMb2NhbFN0b3Jh
Z2VFdmVudChzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJs
U3RyaW5nKTsKQEAgLTMwNyw5ICszMDcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhckNh
Y2hlKCkKIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50
KHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKIHsKLSAgICBBU1NFUlQoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vz
c2lvbik7Ci0KLSAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNw
YWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKKyAgICAvLyBOYW1lc3BhY2UgSURz
IGZvciBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlcyBhbmQgZXBoZW1lcmFsIGxvY2FsIHN0b3Jh
Z2UgbmFtZXNwYWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKICAgICAvLyBzbyB3
ZSBjYW4gZ2V0IHRoZSByaWdodCBwYWdlIGhlcmUuCiAgICAgV2ViUGFnZSogd2ViUGFnZSA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UobWFrZU9iamVjdElkZW50aWZpZXI8UGFnZUlk
ZW50aWZpZXJUeXBlPihtX3N0b3JhZ2VOYW1lc3BhY2VJRCkpOwogICAgIGlmICghd2ViUGFnZSkK
QEAgLTM3Nyw2ICszNzUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKIAogICAg
IHN3aXRjaCAobV9zdG9yYWdlVHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgor
ICAgIGNhc2UgU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOgogICAgIGNhc2UgU3RvcmFnZVR5
cGU6OlRyYW5zaWVudExvY2FsOgogICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRvcExldmVs
T3JpZ2luID0gbV9zdG9yYWdlTmFtZXNwYWNlLT50b3BMZXZlbE9yaWdpbigpKQogICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVUcmFu
c2llbnRMb2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIG1fc3RvcmFnZU5hbWVzcGFjZS0+
c3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlP
cmlnaW4tPmRhdGEoKSksIDApOwpAQCAtMzg1LDE0ICszODQsMTAgQEAgdm9pZCBTdG9yYWdlQXJl
YU1hcDo6Y29ubmVjdCgpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNl
c3Npb246CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdl
cjo6Q3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIG1fc3RvcmFnZU5hbWVz
cGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIDAp
OwotICAgICAgICBpZiAobV9zdG9yYWdlTWFwKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtcyhtX3N0b3JhZ2VNYXBJRCwgbV9z
dG9yYWdlTWFwLT5pdGVtcygpKSwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RvcmFn
ZVR5cGU6OkVwaGVtZXJhbExvY2FsOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX3N0b3JhZ2VNYXApCisgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbXMobV9zdG9y
YWdlTWFwSUQsIG1fc3RvcmFnZU1hcC0+aXRlbXMoKSksIDApOwogICAgIG1faXNEaXNjb25uZWN0
ZWQgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDdlYTVlN2RkOTAy
NDJlMzYwZWYyZjA5OWJkZWVlNjc5YWNjYzVlNDcuLmY1OWM3OWI3ZmEyYmUyZmM5YTcyMDUyYzFi
OWU1M2NiNmEzMjNmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTQ3LDEyICs0Nywx
MiBAQCBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVh
dGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJl
dHVybiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShpZGVudGlmaWVyLCBxdW90YUluQnl0
ZXMpOworICAgIHJldHVybiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoaWRlbnRpZmllciwg
cXVvdGFJbkJ5dGVzLCBJc0VwaGVtZXJhbDo6WWVzKTsKIH0KIAotUmVmPFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKK1JlZjxTdG9yYWdl
TmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMsIElzRXBo
ZW1lcmFsIGlzRXBoZW1lcmFsKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVv
dGFJbkJ5dGVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUlt
cGwoaXNFcGhlbWVyYWwgPT0gSXNFcGhlbWVyYWw6OlllcyA/IFN0b3JhZ2VUeXBlOjpFcGhlbWVy
YWxMb2NhbCA6IFN0b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJ
bkJ5dGVzKSk7CiB9CiAKIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90
IHF1b3RhSW5CeXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCmluZGV4IDY3NTdlM2I4MTg4ODZjNGZm
NTdiYzNlNzlmNGMxNTgwMGY3NWIxYmMuLmVhNmQ1NTE4Y2RmYzk5ZGMzYTAxZDg1N2UzNjYzNjUw
ZjliNjY2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaApAQCAtNDEsNyArNDEsOSBAQCBjbGFzcyBT
dG9yYWdlTmFtZXNwYWNlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUlu
Qnl0ZXMpOwogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUVwaGVt
ZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBx
dW90YUluQnl0ZXMpOwotICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOworCisgICAgZW51bSBjbGFzcyBJc0VwaGVtZXJhbCA6IGJvb2wgeyBObywgWWVz
IH07CisgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gY3JlYXRlTG9jYWxTdG9y
YWdlTmFtZXNwYWNlKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcywg
SXNFcGhlbWVyYWwgaXNFcGhlbWVyYWwpOwogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFj
ZUltcGw+IGNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90
IHF1b3RhSW5CeXRlcyk7CiAKICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1wbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKaW5kZXggOWE2YjZmMzcwMGEwYjk1
ODUxZGVhODEwNmZjYmIzMmE0YjMwNzNmMS4uODhhOTNjNWQ1MDQyYTEyNjM0MTFjNjg0YmVkYmQ1
MDZlMzRiNWEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsCiAKIFJlZjxXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUxvY2FsU3Rv
cmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKIHsKLSAgICByZXR1cm4gU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShtX2lkZW50aWZpZXIsIHF1b3Rh
KTsKKyAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZShtX2lkZW50aWZpZXIsIHF1b3RhLCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6SXNFcGhl
bWVyYWw6Ok5vKTsKIH0KIAogUmVmPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IFdlYlN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbE9yaWdpbiwgdW5zaWduZWQgcXVvdGEp
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWM2
MTJiOTdmMDY1NDUyY2MxMjlhYTdiNDQxOWE3M2YyYjM4YzJhMS4uYzRhNDBlOGZjYzM2ZWZjYWY1
Y2U1MThhYjVjNzIwNDg5MWYwY2IzYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA1LTMwICBTaWh1aSBMaXUg
IDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBBUEkg
ZmFpbHMgdG8gZmV0Y2ggd2ViIHN0b3JhZ2UgZGF0YSBmb3Igbm9uLXBlcnNpc3RlbnQgZGF0YSBz
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDUtMzAgIERhdmlkIFF1ZXNh
ZGEgIDxkYXZpZF9xdWVzYWRhQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQ1
NzU2KSBbTWFjXSAyIFRlc3RXZWJLaXRBUEkuRG93bmxvYWRQcm9ncmVzcyogYW5kIFRlc3RXZWJL
aXRBUEkuX1dLRG93bmxvYWQuRG93bmxvYWRNb25pdG9yQ2FuY2VsIGFyZSBmbGFreSB0aW1lb3V0
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YnNpdGVEYXRhc3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLV2Vic2l0ZURhdGFzdG9yZS5tbQppbmRleCAzZjk1M2E3MDc1MThmZTM4MjA2NzNlYTEwMzIz
NDYwY2I5Mjk0ZDQ2Li4yNDA3NWI3MjVlMDRkYWUzNjZhYzliNGY1NjBmYmE4ZTk3ZTAyZjI5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2Vic2l0
ZURhdGFzdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLV2Vic2l0ZURhdGFzdG9yZS5tbQpAQCAtMzA0LDQgKzMwNCw0NiBAQCBURVNUKFdLV2Vic2l0
ZURhdGFTdG9yZSwgUmVtb3ZlTm9uUGVyc2lzdGVudENyZWRlbnRpYWxzKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CiAKK1RFU1QoV0tXZWJzaXRlRGF0YVN0b3JlLCBG
ZXRjaE5vblBlcnNpc3RlbnRXZWJTdG9yYWdlKQoreworICAgIGF1dG8gbm9uUGVyc2lzdGVudERh
dGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07Cisg
ICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBu
ZXddKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3JlOm5vblBlcnNpc3Rl
bnREYXRhU3RvcmVdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gYWRvcHROUyhbW05hdmlnYXRpb25UZXN0RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBb
d2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsK
KyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpAIjxzY3JpcHQ+c2Vzc2lvblN0b3JhZ2Uuc2V0
SXRlbSgnc2Vzc2lvbicsICdzdG9yYWdlJyk7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xvY2FsJywg
J3N0b3JhZ2UnKTs8L3NjcmlwdD4iIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vbG9jYWxob3N0Il1dOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2FpdEZvckRpZEZpbmlz
aE5hdmlnYXRpb25dOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3Nl
c3Npb24nKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAg
ICAgICBFWFBFQ1RfVFJVRShbQCJzdG9yYWdlIiBpc0VxdWFsVG9TdHJpbmc6cmVzdWx0XSk7Cisg
ICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0g
ZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3Rv
cmFnZS5nZXRJdGVtKCdsb2NhbCcpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNF
cnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFtAInN0b3JhZ2UiIGlzRXF1YWxUb1N0cmlu
ZzpyZXN1bHRdKTsKKyAgICAgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CisKKyAgICByZWFk
eVRvQ29udGludWUgPSBmYWxzZTsKKyAgICBbbm9uUGVyc2lzdGVudERhdGFTdG9yZSBmZXRjaERh
dGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdDpXS1dlYnNpdGVEYXRhVHlwZVNl
c3Npb25TdG9yYWdlXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJl
Y29yZCAqPiAqZGF0YVJlY29yZHMpIHsKKyAgICAgICAgRVhQRUNUX0VRKChpbnQpZGF0YVJlY29y
ZHMuY291bnQsIDEpOworICAgICAgICBFWFBFQ1RfVFJVRShbW1tkYXRhUmVjb3JkcyBvYmplY3RB
dEluZGV4OjBdIGRpc3BsYXlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6QCJsb2NhbGhvc3QiXSk7Cisg
ICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0g
ZmFsc2U7CisgICAgW25vblBlcnNpc3RlbnREYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlw
ZXM6W05TU2V0IHNldFdpdGhPYmplY3Q6V0tXZWJzaXRlRGF0YVR5cGVMb2NhbFN0b3JhZ2VdIGNv
bXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICpkYXRhUmVj
b3JkcykgeworICAgICAgICBFWFBFQ1RfRVEoKGludClkYXRhUmVjb3Jkcy5jb3VudCwgMSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKFtbW2RhdGFSZWNvcmRzIG9iamVjdEF0SW5kZXg6MF0gZGlzcGxh
eU5hbWVdIGlzRXF1YWxUb1N0cmluZzpAImxvY2FsaG9zdCJdKTsKKyAgICAgICAgcmVhZHlUb0Nv
bnRpbnVlID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
YWR5VG9Db250aW51ZSk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371012</attachid>
            <date>2019-05-30 18:36:25 -0700</date>
            <delta_ts>2019-06-04 13:12:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198317-20190530183624.patch</filename>
            <type>text/plain</type>
            <size>34828</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlNDY2NTI5NjAxZjkxMzhh
OGMzNGM4MTJlNmU3ZmIwOWZiYTRiMGEuLmYzZjk3YzZlMDJhZDAzMWIxZDFjODQ2M2I5OThlZDE2
OGNhNjAwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTktMDUtMzAgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQ
SSBmYWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRh
IHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxMjQ0NjYyPgorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVXNlIExvY2FsU3RvcmFnZU5hbWVT
cGFjZSBpbnN0ZWFkIG9mIFNlc3Npb25TdG9yYWdlTmFtZVNwYWNlIGZvciBsb2NhbFN0b3JhZ2Ug
aW4gZXBoZW1lcmFsIHNlc3Npb24gb3IgCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjppc0VwaGVtZXJhbCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6cmVt
b3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFy
ZWE6OnNldEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VB
cmVhOjpvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6fkxvY2FsU3Rv
cmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VB
cmVhcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U6OmVwaGVtZXJhbE9yaWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbG9uZVRvKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNG
b3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxT
dG9yYWdlT3JpZ2luc01vZGlmaWVkU2luY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU1hcCk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMpOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNs
ZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjppc1Nlc3Npb25TdG9yYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNw
YXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNw
YXRjaFNlc3Npb25TdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1h
cDo6Y29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNy
ZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUxv
Y2FsU3RvcmFnZU5hbWVzcGFjZSk6CisKIDIwMTktMDUtMzAgIFNpaHVpIExpdSAgPHNpaHVpX2xp
dUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RvcCBTdG9yYWdlTWFuYWdlciB3aGVuIG5ldHdvcmsg
cHJvY2VzcyBpcyByZWFkeSB0byBzdXNwZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCA0MzRm
M2UzNmY1ZDc4OWJmOTUwMTY4MGQ4Zjk5YTQ5YTA2NDQxNjZmLi4zZGM1NTdkMmJiZThkMTU2Nzc4
MWFhN2VmOWUxMzIzOWIyYjMzZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTYzLDcgKzYz
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcygp
IGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIGJvb2wgaXNTZXNzaW9uU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsgfQorICAgIGJvb2wgaXNF
cGhlbWVyYWwoKSBjb25zdCB7IHJldHVybiAhbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7IH0KIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBTdG9yYWdlQXJlYShMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uq
LCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwpAQCAt
NzIsNyArNzIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3Jh
Z2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7CiAKLSAg
ICAvLyBXaWxsIGJlIG51bGwgaWYgdGhlIHN0b3JhZ2UgYXJlYSBiZWxvbmdzIHRvIGEgc2Vzc2lv
biBzdG9yYWdlIG5hbWVzcGFjZS4KKyAgICAvLyBXaWxsIGJlIG51bGwgaWYgdGhlIHN0b3JhZ2Ug
YXJlYSBiZWxvbmdzIHRvIGEgc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZSBvciB0aGUgc3RvcmFn
ZSBhcmVhIGlzIGluIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgogICAgIExvY2FsU3RvcmFnZU5hbWVz
cGFjZSogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7CiAgICAgbXV0YWJsZSBSZWZQdHI8TG9jYWxT
dG9yYWdlRGF0YWJhc2U+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7CiAgICAgbXV0YWJsZSBib29s
IG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJhc2UgeyBmYWxzZSB9OwpAQCAtOTEsMTIgKzkxLDE2
IEBAIHB1YmxpYzoKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIGNvbnN0
IHsgcmV0dXJuICZtX3N0b3JhZ2VNYW5hZ2VyOyB9CiAKLSAgICBSZWY8U3RvcmFnZUFyZWE+IGdl
dE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYpOworICAgIGVudW0gY2xh
c3MgSXNFcGhlbWVyYWwgOiBib29sIHsgTm8sIFllcyB9OworICAgIFJlZjxTdG9yYWdlQXJlYT4g
Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJiwgSXNFcGhlbWVyYWwp
OwogICAgIHZvaWQgZGlkRGVzdHJveVN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhKik7CiAKICAgICB2
b2lkIGNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJik7CiAgICAgdm9pZCBjbGVhckFsbFN0b3JhZ2VBcmVhcygpOwogCisgICAgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4gZXBoZW1lcmFsT3JpZ2lucygpIGNvbnN0OworICAgIHZvaWQgY2xv
bmVUbyhMb2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CisK
IHByaXZhdGU6CiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyJiwgdWlu
dDY0X3Qgc3RvcmFnZU1hbmFnZXJJRCk7CiAKQEAgLTEwNCw4ICsxMDgsNyBAQCBwcml2YXRlOgog
ICAgIHVpbnQ2NF90IG1fc3RvcmFnZU5hbWVzcGFjZUlEOwogICAgIHVuc2lnbmVkIG1fcXVvdGFJ
bkJ5dGVzOwogCi0gICAgLy8gV2UgZG9uJ3QgaG9sZCBhbiBleHBsaWNpdCByZWZlcmVuY2UgdG8g
dGhlIFN0b3JhZ2VBcmVhczsgdGhleSBhcmUga2VwdCBhbGl2ZSBieSB0aGUgbV9zdG9yYWdlQXJl
YXNCeUNvbm5lY3Rpb24gbWFwIGluIFN0b3JhZ2VNYW5hZ2VyLgotICAgIEhhc2hNYXA8U2VjdXJp
dHlPcmlnaW5EYXRhLCBTdG9yYWdlQXJlYSo+IG1fc3RvcmFnZUFyZWFNYXA7CisgICAgSGFzaE1h
cDxTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFN
YXA7CiB9OwogCiAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3Jh
Z2UvI2Rpc2stc3BhY2UKQEAgLTE5Niw3ICsxOTksNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0
aQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6cmVtb3ZlTGlzdGVuZXIoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJ
RCkKIHsKLSAgICBBU1NFUlQoaXNTZXNzaW9uU3RvcmFnZSgpIHx8IG1fZXZlbnRMaXN0ZW5lcnMu
Y29udGFpbnMoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKSk7Cisg
ICAgQVNTRVJUKGlzRXBoZW1lcmFsKCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKICAgICBtX2V2ZW50TGlz
dGVuZXJzLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkp
OwogfQogCkBAIC0yMzYsNyArMjM5LDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VB
cmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjCiAKIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtcyhjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgaXRlbXMpCiB7Ci0gICAgQVNTRVJUKCFtX2xvY2FsU3RvcmFnZURhdGFi
YXNlKTsKKyAgICAvLyBJbXBvcnQgaXRlbXMgZnJvbSB3ZWIgcHJvY2VzcyBpZiBpdGVtcyBhcmUg
bm90IHN0b3JlZCBvbiBkaXNrLgorICAgIGlmICghaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlOwogICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOwpAQCAtMzExLDkgKzMxNywxMCBA
QCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0
SXRlbXNJZk5lZWRlZCgpIGNvbnN0CiAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlTWFuYWdlcigpLT5tX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcik7CiAgICAgLy8g
V2Ugb3BlbiB0aGUgZGF0YWJhc2UgaGVyZSBldmVuIGlmIHdlJ3ZlIGFscmVhZHkgaW1wb3J0ZWQg
b3VyIGl0ZW1zIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhYmFzZSBpcyBvcGVuIGlmIHdlIG5lZWQg
dG8gd3JpdGUgdG8gaXQuCiAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAg
ICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZSht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9xdWV1ZS5jb3B5UmVm
KCksIG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX2xvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlci5jb3B5UmVmKCksIG1fc2VjdXJpdHlPcmlnaW4pOworICAgICAg
ICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZSht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9xdWV1ZS5jb3B5UmVm
KCksICptX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIsIG1fc2VjdXJpdHlPcmlnaW4pOwogCiAgICAgaWYgKG1fZGlk
SW1wb3J0SXRlbXNGcm9tRGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCwxNCArMzU3
LDEzIEBAIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OkxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShTdG9yYWdlTWFuYWdlciYgc3RvCiAKIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6On5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKQogewotICAgIEFTU0VSVCht
X3N0b3JhZ2VBcmVhTWFwLmlzRW1wdHkoKSk7CiB9CiAKLWF1dG8gU3RvcmFnZU1hbmFnZXI6Okxv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
bkRhdGEmJiBzZWN1cml0eU9yaWdpbikgLT4gUmVmPFN0b3JhZ2VBcmVhPgorYXV0byBTdG9yYWdl
TWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luLCBJc0VwaGVtZXJhbCBpc0VwaGVtZXJh
bCkgLT4gUmVmPFN0b3JhZ2VBcmVhPgogewogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gcHJvdGVj
dGVkU3RvcmFnZUFyZWE7CiAgICAgcmV0dXJuICptX3N0b3JhZ2VBcmVhTWFwLmVuc3VyZShzZWN1
cml0eU9yaWdpbiwgWyZdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHByb3RlY3RlZFN0b3JhZ2VBcmVh
ID0gU3RvcmFnZUFyZWE6OmNyZWF0ZSh0aGlzLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9x
dW90YUluQnl0ZXMpOworICAgICAgICBwcm90ZWN0ZWRTdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVh
OjpjcmVhdGUoaXNFcGhlbWVyYWwgPT0gSXNFcGhlbWVyYWw6OlllcyA/IG51bGxwdHIgOiB0aGlz
LCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9xdW90YUluQnl0ZXMpOwogICAgICAgICByZXR1
cm4gcHJvdGVjdGVkU3RvcmFnZUFyZWEuZ2V0KCk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwog
fQpAQCAtMzgzLDEwICszODksMjYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnMKIAogdm9pZCBT
dG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVh
cygpCiB7Ci0gICAgZm9yIChhdXRvKiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFs
dWVzKCkpCisgICAgZm9yIChhdXRvIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1
ZXMoKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKCk7CiB9CiAKK1ZlY3RvcjxTZWN1cml0
eU9yaWdpbkRhdGE+IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmVwaGVt
ZXJhbE9yaWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9y
aWdpbnM7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFN
YXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmln
aW4oKSk7CisgICAgfQorICAgIHJldHVybiBvcmlnaW5zOworfQorCit2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsb25lVG8oTG9jYWxTdG9yYWdlTmFtZXNwYWNl
JiBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9z
dG9yYWdlQXJlYU1hcCkKKyAgICAgICAgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlLm1fc3RvcmFn
ZUFyZWFNYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlLT5jbG9uZSgpKTsKK30KKwogY2xhc3Mg
U3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlPiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlKHVuc2lnbmVkIHF1b3RhSW5C
eXRlcyk7CkBAIC00ODMsMTEgKzUwNSwxMSBAQCBSZWY8U3RvcmFnZU1hbmFnZXI+IFN0b3JhZ2VN
YW5hZ2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCiAKIFN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSkKICAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJL
aXQuU3RvcmFnZU1hbmFnZXIiKSkKLSAgICAsIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
KExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6Y3JlYXRlKG1fcXVldWUuY29weVJlZigpLCBs
b2NhbFN0b3JhZ2VEaXJlY3RvcnkpKQotICAgICwgbV9pc0VwaGVtZXJhbChsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkuaXNOdWxsKCkpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBlbmNvZGluZyBpcyBp
bml0aWFsaXplZCBiZWZvcmUgd2Ugc3RhcnQgZGlzcGF0Y2hpbmcgdGhpbmdzIHRvIHRoZSBxdWV1
ZS4KICAgICBVVEY4RW5jb2RpbmcoKTsKKyAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeS5p
c051bGwoKSkKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIgPSBMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmNyZWF0ZShtX3F1ZXVlLmNvcHlSZWYoKSwgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KTsKIH0KIAogU3RvcmFnZU1hbmFnZXI6On5TdG9yYWdlTWFuYWdlcigpCkBA
IC01NDgsNiArNTcwLDEzIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgICAgIEFTU0VS
VChuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CiAKICAgICAgICAgc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UtPmNsb25lVG8oKm5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKKworICAgICAg
ICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKSB7CisgICAgICAgICAgICBpZiAo
YXV0byogbG9jYWxTdG9yYWdlTmFtZXNwYWNlID0gbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmdl
dChzdG9yYWdlTmFtZXNwYWNlSUQpKSB7CisgICAgICAgICAgICAgICAgTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiBuZXdsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICAgICAgICAgIGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+Y2xvbmVUbygqbmV3bG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC02MjksOCArNjU4LDE1IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbnMoRnVuY3Rpb248dm9p
ZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgSGFzaFNldDxTZWN1cml0
eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+b3JpZ2lucygpKQotICAgICAgICAgICAgb3JpZ2lu
cy5hZGQob3JpZ2luKTsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLT5vcmlnaW5zKCkpCisgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQob3JpZ2lu
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxT
dG9yYWdlTmFtZVNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBsb2NhbFN0b3JhZ2VOYW1lU3BhY2Ut
PmVwaGVtZXJhbE9yaWdpbnMoKSkKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQob3Jp
Z2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1l
c3BhY2VzLnZhbHVlcygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHRyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+b3JpZ2lucygpKQpAQCAtNjQ2LDcgKzY4Miw5IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbnMoRnVuY3Rpb248dm9p
ZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRMb2NhbFN0
b3JhZ2VPcmlnaW5EZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW5EZXRhaWxzID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPm9yaWdpbkRldGFpbHMoKTsKKyAgICAgICAgVmVjdG9yPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gb3JpZ2luRGV0YWlsczsKKyAgICAgICAgaWYg
KG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQorICAgICAgICAgICAgb3JpZ2luRGV0YWls
cyA9IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5vcmlnaW5EZXRhaWxzKCk7CiAKICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5EZXRhaWxzID0gV1RGTW92ZShv
cmlnaW5EZXRhaWxzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
b3JpZ2luRGV0YWlscykpOwpAQCAtNjYzLDIzICs3MDEsMjkgQEAgdm9pZCBTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Ug
OiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCiAgICAgICAgICAg
ICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hp
bmdPcmlnaW4oY29waWVkT3JpZ2luKTsKIAotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKGNvcGllZE9yaWdpbik7CisgICAgICAg
IGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikKKyAgICAgICAgICAgIG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4oY29waWVkT3Jp
Z2luKTsKICAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlT3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3Rpb248dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gb3JpZ2lu
c1RvRGVsZXRlID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPmRhdGFiYXNlc01vZGlm
aWVkU2luY2UodGltZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52
YWx1ZXMoKSkKLSAgICAgICAgICAgIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xl
YXJBbGxTdG9yYWdlQXJlYXMoKTsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyKSB7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLT5kYXRhYmFzZXNNb2RpZmllZFNpbmNlKHRpbWUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAg
ICAgICAgICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFn
ZUFyZWFzKCk7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiBvcmlnaW5zVG9E
ZWxldGUpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2luc1Rv
RGVsZXRlKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgICAgICAgICAg
ICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdp
bihvcmlnaW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3JpZ2luKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9j
YWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQot
ICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNN
YXRjaGluZ09yaWdpbihvcmlnaW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG9yaWdpbik7
CisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3JhZ2VB
cmVhcygpOwogICAgICAgICB9CiAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcwMiw3ICs3NDYsOCBAQCB2b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6UwogICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
CiAgICAgICAgICAgICAgICAgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0
b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKG9yaWdpbik7CiAKLSAgICAgICAgICAgIG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3JpZ2luKTsK
KyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikKKyAgICAgICAg
ICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRo
T3JpZ2luKG9yaWdpbik7CiAgICAgICAgIH0KIAogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtNzEyLDcgKzc1Nyw2IEBAIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0
b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2Vj
dXJpdHlPcmlnaW5EYXRhKQogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVl
SUQoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0
YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2lzRXBoZW1lcmFsKTsKICAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihj
b25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KQEAgLTcyOSw3ICs3NzMsNyBAQCB2b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCB1aW50NjRfdAogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgogICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKIAotICAgICAgICBh
dXRvIHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3Jh
Z2VBcmVhKFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKSk7CisgICAgICAgIGF1dG8gc3RvcmFn
ZUFyZWEgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RG
TW92ZShzZWN1cml0eU9yaWdpbkRhdGEpLCBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlciA/
IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OklzRXBoZW1lcmFsOjpObyA6
IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OklzRXBoZW1lcmFsOjpZZXMp
OwogICAgICAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbklELCBzdG9yYWdl
TWFwSUQpOwogCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3ZlKHN0b3Jh
Z2VBcmVhKTsKQEAgLTc0OCw3ICs3OTIsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVU
cmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAg
ICAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29ubmVjdGlvbklEKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgUmVmPFN0b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52
YWx1ZTsKLSAgICAgICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAgICAg
ICAgICAgaWYgKCFhcmVhLT5pc0VwaGVtZXJhbCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+aXNTYW1lU2NoZW1l
SG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigpLmdldCgpKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc4MCwxMCArODI0LDYgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdl
TWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5
T3JpZ2luRGF0YSkKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlELCBzZWN1cml0eU9yaWdpbkRhdGEgPSBz
ZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgICAgICBtX2VwaGVtZXJhbFN0b3JhZ2UuYWRkKHNl
Y3VyaXR5T3JpZ2luRGF0YSwgV2ViQ29yZTo6U3RvcmFnZU1hcDo6Y3JlYXRlKGxvY2FsU3RvcmFn
ZURhdGFiYXNlUXVvdGFJbkJ5dGVzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KICAgICAg
ICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5h
bWVzcGFjZUlEKSk7CiAKQEAgLTgyOSw3ICs4NjksNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpk
ZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0
bwogICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb25JRCwgc3RvcmFn
ZU1hcElEKTsKIAogICAgICAgICAvLyBEb24ndCByZW1vdmUgc2Vzc2lvbiBzdG9yYWdlIG1hcHMu
IFRoZSB3ZWIgcHJvY2VzcyBtYXkgcmVjb25uZWN0IGFuZCBleHBlY3QgdGhlIGRhdGEgdG8gc3Rp
bGwgYmUgYXJvdW5kLgotICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1Nlc3Npb25TdG9yYWdlKCkp
CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzRXBoZW1lcmFsKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rp
b25BbmRTdG9yYWdlTWFwSURQYWlyKTsKQEAgLTg0NywxNCArODg3LDExIEBAIHZvaWQgU3RvcmFn
ZU1hbmFnZXI6OmdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6
OlNlY3VyaXR5T3JpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNl
Y3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3Rv
cmFnZU1hcElELCBzdG9yYWdlTWFwU2VlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAg
ICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdl
LmdldChzZWN1cml0eU9yaWdpbkRhdGEpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlk
R2V0VmFsdWVzKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU1hcC0+aXRl
bXMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBo
YXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorCisgICAgICAgIC8vIFRoaXMgaXMg
YSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgICAg
IHJldHVybiBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCB7IH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfQorCiAgICAgICAgIGRpZEdl
dFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VBcmVhLT5pdGVt
cygpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIGNvbm5lY3Rpb24tPnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRHZXRWYWx1ZXMoc3RvcmFnZU1hcFNlZWQp
LCBzdG9yYWdlTWFwSUQpOwogICAgIH0pOwpAQCAtODY0LDE3ICs5MDEsMTAgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2kKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwg
c2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBz
dG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCBrZXkgPSBr
ZXkuaXNvbGF0ZWRDb3B5KCksIHZhbHVlID0gdmFsdWUuaXNvbGF0ZWRDb3B5KCksIHVybFN0cmlu
ZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byog
c3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1h
cElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICAgICAgaWYgKG1faXNF
cGhlbWVyYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhl
bWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2Vw
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVl
LCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3Ig
YSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKworICAgICAg
ICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgIGlmICghc3RvcmFnZUFyZWEp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBib29sIHF1b3RhRXJy
b3I7CiAgICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCks
IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdmFsdWUsIHVybFN0cmluZywgcXVvdGFFcnJvcik7
CkBAIC04OTQsMTYgKzkyNCwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcgogewogICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1
cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFn
ZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIGtleSA9IGtleS5pc29sYXRlZENvcHkoKSwgdXJsU3Ry
aW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewogICAgICAgICBhdXRv
KiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdl
TWFwSUQpOwotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgICAgICBpZiAobV9p
c0VwaGVtZXJhbCkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2Vw
aGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5y
ZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBw
YWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKworICAgICAgICAv
LyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJl
YWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBzdG9yYWdlQXJlYS0+cmVt
b3ZlSXRlbShjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXks
IHVybFN0cmluZyk7CiAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VB
cmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQp
OwpAQCAtOTE0LDEyICs5MzgsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xlYXIoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkQKIHsKICAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2Vj
dXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3Jh
Z2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCB1cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRD
b3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3Jh
Z2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7Ci0gICAgICAgIGlmICghc3Rv
cmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKQotICAgICAgICAgICAg
ICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsKLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQg
aGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlz
IGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4g
Y2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVj
dGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwgdXJsU3RyaW5nKTsKICAgICAg
ICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0
b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKQEAgLTk0Niw3ICs5NjgsNyBAQCB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjp3YWl0VW50aWxXcml0ZXNGaW5pc2hlZCgpCiAKIHZvaWQgU3RvcmFnZU1h
bmFnZXI6OnN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGlmIChtX2lzRXBoZW1lcmFsKQorICAgIGlmICghbV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIExvY2tlcjxMb2NrPiBzdGF0
ZUxvY2tlcihtX3N0YXRlTG9jayk7CkBAIC05NzEsNyArOTkzLDcgQEAgdm9pZCBTdG9yYWdlTWFu
YWdlcjo6c3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCiB7Ci0gICAgaWYgKG1faXNFcGhl
bWVyYWwpCisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTG9ja2VyPExvY2s+IHN0YXRlTG9ja2VyKG1fc3RhdGVMb2NrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKaW5kZXggZjZjMDMyMjEwMTg1ZjA1MWM5MjYwODEwNDY2MzM2MjQ3MDA5MjQ5
OS4uNWE3NzY1ZTNiY2FkNGI2MWQxYzIyMzA0YjdhNmMxMWZlNGQ0Mjc3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmPFdvcmtRdWV1ZT4g
bV9xdWV1ZTsKIAotICAgIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+IG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOworICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+PiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZXM7CiAKICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhPiwgUmVmUHRyPFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+IG1fdHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlczsKQEAgLTExMyw5ICsxMTMsNiBAQCBwcml2YXRl
OgogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWlu
dDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsK
IAotICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWY8V2ViQ29yZTo6
U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFnZTsKLSAgICBib29sIG1faXNFcGhlbWVyYWwg
eyBmYWxzZSB9OwotCiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFJ1bm5pbmcsCiAg
ICAgICAgIFdpbGxTdXNwZW5kLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmluZGV4IDBlOTQyOTYwNDllNmMwODdhYjZl
OGYwYzVlYmZlNGMxYTJlMmMwNzguLmRkNzQzYTlmOTY5YzRkZDAxNTY1OTkxMGJkNzM2NWY4Yjdl
YjNiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
TWFwOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCh1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBj
b25zdCBTdAogICAgICAgICBhcHBseUNoYW5nZShrZXksIG5ld1ZhbHVlKTsKICAgICB9CiAKLSAg
ICBpZiAoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbikKKyAgICBpZiAoc3Rv
cmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbiB8fCBzdG9yYWdlVHlwZSgpID09IFN0
b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCkKICAgICAgICAgZGlzcGF0Y2hTZXNzaW9uU3RvcmFn
ZUV2ZW50KHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxT
dHJpbmcpOwogICAgIGVsc2UKICAgICAgICAgZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudChzb3Vy
Y2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKTsKQEAg
LTMwNyw5ICszMDcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhckNhY2hlKCkKIAogdm9p
ZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsK
LSAgICBBU1NFUlQoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7Ci0KLSAg
ICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlcyBhcmUgZXF1
aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKKyAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNzaW9u
IHN0b3JhZ2UgbmFtZXNwYWNlcyBhbmQgZXBoZW1lcmFsIGxvY2FsIHN0b3JhZ2UgbmFtZXNwYWNl
cyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKICAgICAvLyBzbyB3ZSBjYW4gZ2V0IHRo
ZSByaWdodCBwYWdlIGhlcmUuCiAgICAgV2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLndlYlBhZ2UobWFrZU9iamVjdElkZW50aWZpZXI8UGFnZUlkZW50aWZpZXJUeXBl
PihtX3N0b3JhZ2VOYW1lc3BhY2VJRCkpOwogICAgIGlmICghd2ViUGFnZSkKQEAgLTM3Nyw2ICsz
NzUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKIAogICAgIHN3aXRjaCAobV9z
dG9yYWdlVHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgorICAgIGNhc2UgU3Rv
cmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOgogICAgIGNhc2UgU3RvcmFnZVR5cGU6OlRyYW5zaWVu
dExvY2FsOgogICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRvcExldmVsT3JpZ2luID0gbV9z
dG9yYWdlTmFtZXNwYWNlLT50b3BMZXZlbE9yaWdpbigpKQogICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVUcmFuc2llbnRMb2NhbFN0
b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIG1fc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVz
cGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEo
KSksIDApOwpAQCAtMzg1LDE0ICszODQsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVj
dCgpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb246CiAgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlU2Vz
c2lvblN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIG1fc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFn
ZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIDApOwotICAgICAgICBp
ZiAobV9zdG9yYWdlTWFwKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtcyhtX3N0b3JhZ2VNYXBJRCwgbV9zdG9yYWdlTWFwLT5p
dGVtcygpKSwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RvcmFnZVR5cGU6OkVwaGVt
ZXJhbExvY2FsOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIGlmIChtX3N0b3JhZ2VNYXApCisgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbXMobV9zdG9yYWdlTWFwSUQsIG1f
c3RvcmFnZU1hcC0+aXRlbXMoKSksIDApOwogICAgIG1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDdlYTVlN2RkOTAyNDJlMzYwZWYyZjA5
OWJkZWVlNjc5YWNjYzVlNDcuLmY1OWM3OWI3ZmEyYmUyZmM5YTcyMDUyYzFiOWU1M2NiNmEzMjNm
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTQ3LDEyICs0NywxMiBAQCBSZWY8U3Rv
cmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qg
aWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJldHVybiBjcmVhdGVT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShpZGVudGlmaWVyLCBxdW90YUluQnl0ZXMpOworICAgIHJl
dHVybiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoaWRlbnRpZmllciwgcXVvdGFJbkJ5dGVz
LCBJc0VwaGVtZXJhbDo6WWVzKTsKIH0KIAotUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IGlk
ZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKK1JlZjxTdG9yYWdlTmFtZXNwYWNlSW1w
bD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50
NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMsIElzRXBoZW1lcmFsIGlzRXBo
ZW1lcmFsKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
KFN0b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwoaXNFcGhlbWVy
YWwgPT0gSXNFcGhlbWVyYWw6OlllcyA/IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCA6IFN0
b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CiB9
CiAKIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRl
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5oCmluZGV4IDY3NTdlM2I4MTg4ODZjNGZmNTdiYzNlNzlmNGMx
NTgwMGY3NWIxYmMuLmVhNmQ1NTE4Y2RmYzk5ZGMzYTAxZDg1N2UzNjYzNjUwZjliNjY2YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaApAQCAtNDEsNyArNDEsOSBAQCBjbGFzcyBTdG9yYWdlTmFtZXNw
YWNlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwogICAg
IHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMp
OwotICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUxvY2FsU3RvcmFn
ZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwor
CisgICAgZW51bSBjbGFzcyBJc0VwaGVtZXJhbCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgc3Rh
dGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcywgSXNFcGhlbWVyYWwg
aXNFcGhlbWVyYWwpOwogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRl
cyk7CiAKICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1wbCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1dlYlN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlci5jcHAKaW5kZXggOWE2YjZmMzcwMGEwYjk1ODUxZGVhODEwNmZj
YmIzMmE0YjMwNzNmMS4uODhhOTNjNWQ1MDQyYTEyNjM0MTFjNjg0YmVkYmQ1MDZlMzRiNWEwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBA
IFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsCiAKIFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNl
PiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFj
ZSh1bnNpZ25lZCBxdW90YSkKIHsKLSAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNy
ZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShtX2lkZW50aWZpZXIsIHF1b3RhKTsKKyAgICByZXR1
cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShtX2lk
ZW50aWZpZXIsIHF1b3RhLCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6SXNFcGhlbWVyYWw6Ok5vKTsK
IH0KIAogUmVmPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IFdlYlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luJiB0b3BMZXZlbE9yaWdpbiwgdW5zaWduZWQgcXVvdGEpCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWZiNjE3MzBjYmM5Y2U3
ZWYwYzBjNzNmNjdiZjFjYTUxMDE3NDgxYy4uYzlhMmY0ODFlYTA0MGM5NDg4NDk1NWU2ZDQ5N2Y1
YjVjNjAxMjA3OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA1LTMwICBTaWh1aSBMaXUgIDxzaWh1aV9saXVA
YXBwbGUuY29tPgorCisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBBUEkgZmFpbHMgdG8gZmV0
Y2ggd2ViIHN0b3JhZ2UgZGF0YSBmb3Igbm9uLXBlcnNpc3RlbnQgZGF0YSBzdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MzE3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDUtMzAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgSXNvSGVhcHMgZG9uJ3Qgbm90aWNlIHVuY29tbWl0
dGVkIFZBIGJlY29taW5nIHRoZSBmaXJzdCBlbGlnaWJsZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3RvcmUubW0K
aW5kZXggM2Y5NTNhNzA3NTE4ZmUzODIwNjczZWExMDMyMzQ2MGNiOTI5NGQ0Ni4uMjQwNzViNzI1
ZTA0ZGFlMzY2YWM5YjRmNTYwZmJhOGU5N2UwMmYyOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3RvcmUubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3RvcmUubW0K
QEAgLTMwNCw0ICszMDQsNDYgQEAgVEVTVChXS1dlYnNpdGVEYXRhU3RvcmUsIFJlbW92ZU5vblBl
cnNpc3RlbnRDcmVkZW50aWFscykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwogfQogCitURVNUKFdLV2Vic2l0ZURhdGFTdG9yZSwgRmV0Y2hOb25QZXJzaXN0ZW50V2ViU3Rv
cmFnZSkKK3sKKyAgICBhdXRvIG5vblBlcnNpc3RlbnREYXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0
YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0V2Vic2l0ZURhdGFTdG9yZTpub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOYXZpZ2F0aW9u
VGVzdERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6QCI8c2NyaXB0PnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Nlc3Npb24nLCAnc3RvcmFn
ZScpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2NhbCcsICdzdG9yYWdlJyk7PC9zY3JpcHQ+IiBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2xvY2FsaG9zdCJdXTsKKyAgICBb
bmF2aWdhdGlvbkRlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKworICAgIHJl
YWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
IndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzZXNzaW9uJykiIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW0Aic3Rv
cmFnZSIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAgICByZWFkeVRvQ29udGludWUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9jYWwnKSIg
Y29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBF
Q1RfVFJVRShbQCJzdG9yYWdlIiBpc0VxdWFsVG9TdHJpbmc6cmVzdWx0XSk7CisgICAgICAgIHJl
YWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7Cisg
ICAgW25vblBlcnNpc3RlbnREYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0
IHNldFdpdGhPYmplY3Q6V0tXZWJzaXRlRGF0YVR5cGVTZXNzaW9uU3RvcmFnZV0gY29tcGxldGlv
bkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKmRhdGFSZWNvcmRzKSB7
CisgICAgICAgIEVYUEVDVF9FUSgoaW50KWRhdGFSZWNvcmRzLmNvdW50LCAxKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoW1tbZGF0YVJlY29yZHMgb2JqZWN0QXRJbmRleDowXSBkaXNwbGF5TmFtZV0g
aXNFcXVhbFRvU3RyaW5nOkAibG9jYWxob3N0Il0pOworICAgICAgICByZWFkeVRvQ29udGludWUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFtub25QZXJzaXN0
ZW50RGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0
OldLV2Vic2l0ZURhdGFUeXBlTG9jYWxTdG9yYWdlXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJy
YXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqZGF0YVJlY29yZHMpIHsKKyAgICAgICAgRVhQRUNU
X0VRKChpbnQpZGF0YVJlY29yZHMuY291bnQsIDEpOworICAgICAgICBFWFBFQ1RfVFJVRShbW1tk
YXRhUmVjb3JkcyBvYmplY3RBdEluZGV4OjBdIGRpc3BsYXlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6
QCJsb2NhbGhvc3QiXSk7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworfQorCiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371325</attachid>
            <date>2019-06-04 13:12:41 -0700</date>
            <delta_ts>2019-06-04 13:54:37 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198317-20190604131240.patch</filename>
            <type>text/plain</type>
            <size>35113</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2MDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRjMWVlZjQxMzJkZGVhMjZh
YzY3MjVkOTI2Mzg3ZjgyMTQ0NmJhZWUuLmFhMDBlZTE4NTRmMDc2ZDBhMmY2OWMyYWZlYzE0OGZk
MGU1OWUzZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTktMDYtMDQgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIEFQ
SSBmYWlscyB0byBmZXRjaCB3ZWIgc3RvcmFnZSBkYXRhIGZvciBub24tcGVyc2lzdGVudCBkYXRh
IHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxMjQ0NjYyPgorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVXNlIExvY2FsU3RvcmFnZU5hbWVT
cGFjZSBpbnN0ZWFkIG9mIFNlc3Npb25TdG9yYWdlTmFtZVNwYWNlIGZvciBsb2NhbFN0b3JhZ2Ug
aW4gZXBoZW1lcmFsIHNlc3Npb24gb3IgCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuCisKKyAg
ICAgICAgUmVsYW5kIHIyNDU5NDMgYXMgdGVzdCBoYXMgYmVlbiBmaXhlZCBpbiByMjQ2MDEyLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6aXNFcGhlbWVy
YWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6
OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OlN0b3Jh
Z2VBcmVhOjpzZXRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6On5Mb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6TG9j
YWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9y
YWdlQXJlYXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjplcGhlbWVyYWxPcmlnaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xvbmVUbyk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRy
aWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxv
Y2FsU3RvcmFnZU9yaWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcCk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VN
YXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVN0b3JhZ2VNYXAp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2Vy
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6aXNTZXNzaW9uU3RvcmFnZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFy
ZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVh
dGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorCiAyMDE5LTA2LTA0ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTGF6aWx5IGNvbnN0cnVjdCB0aGUgTmV0d29ya0hU
VFBTVXBncmFkZUNoZWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDY4YmZjNDJkZDljNDU5
MTNmMzQ3ZWU2ZWU0NWJkYjVjNzc4OWQwNmUuLjlmM2U2ODE5NWViZGNhNGJiZjc5MzVlZmY5NWQ4
ZGI3MGNhMTRiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKCkgY29uc3Q7CiAg
ICAgdm9pZCBjbGVhcigpOwogCi0gICAgYm9vbCBpc1Nlc3Npb25TdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CisgICAgYm9vbCBpc0VwaGVtZXJhbCgp
IGNvbnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsgfQogCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IFN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFjZSosIGNvbnN0IFNl
Y3VyaXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7CkBAIC03Miw3ICs3Miw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKIAotICAgIC8vIFdpbGwg
YmUgbnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9uZ3MgdG8gYSBzZXNzaW9uIHN0b3JhZ2Ug
bmFtZXNwYWNlLgorICAgIC8vIFdpbGwgYmUgbnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9u
Z3MgdG8gYSBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlIG9yIHRoZSBzdG9yYWdlIGFyZWEgaXMg
aW4gYW4gZXBoZW1lcmFsIHNlc3Npb24uCiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBtX2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZTsKICAgICBtdXRhYmxlIFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRh
YmFzZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKICAgICBtdXRhYmxlIGJvb2wgbV9kaWRJbXBv
cnRJdGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNlIH07CkBAIC05MSwxMiArOTEsMTYgQEAgcHVibGlj
OgogCiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4g
Jm1fc3RvcmFnZU1hbmFnZXI7IH0KIAotICAgIFJlZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJik7CisgICAgZW51bSBjbGFzcyBJc0VwaGVt
ZXJhbCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRPckNyZWF0
ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmLCBJc0VwaGVtZXJhbCk7CiAgICAgdm9p
ZCBkaWREZXN0cm95U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWEqKTsKIAogICAgIHZvaWQgY2xlYXJT
dG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmKTsKICAg
ICB2b2lkIGNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiBlcGhlbWVyYWxPcmlnaW5zKCkgY29uc3Q7CisgICAgdm9pZCBjbG9uZVRvKExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSYgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKKwogcHJpdmF0ZToK
ICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZU1hbmFnZXImLCB1aW50NjRfdCBzdG9y
YWdlTWFuYWdlcklEKTsKIApAQCAtMTA0LDggKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0
X3QgbV9zdG9yYWdlTmFtZXNwYWNlSUQ7CiAgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7CiAK
LSAgICAvLyBXZSBkb24ndCBob2xkIGFuIGV4cGxpY2l0IHJlZmVyZW5jZSB0byB0aGUgU3RvcmFn
ZUFyZWFzOyB0aGV5IGFyZSBrZXB0IGFsaXZlIGJ5IHRoZSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbiBtYXAgaW4gU3RvcmFnZU1hbmFnZXIuCi0gICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRh
dGEsIFN0b3JhZ2VBcmVhKj4gbV9zdG9yYWdlQXJlYU1hcDsKKyAgICBIYXNoTWFwPFNlY3VyaXR5
T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYU1hcDsKIH07CiAK
IC8vIFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIvd2Vic3RvcmFnZS8jZGlzay1z
cGFjZQpAQCAtMTk2LDcgKzE5OSw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVh
OjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3RpCiAKIHZvaWQg
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKQogewotICAg
IEFTU0VSVChpc1Nlc3Npb25TdG9yYWdlKCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhz
dGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKKyAgICBBU1NFUlQo
aXNFcGhlbWVyYWwoKSB8fCBtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSkpOwogICAgIG1fZXZlbnRMaXN0ZW5lcnMucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSk7CiB9CiAKQEAg
LTIzNiw3ICsyMzksMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OnNldEl0
ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWMKIAogdm9pZCBTdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUFyZWE6OnNldEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiBpdGVtcykKIHsKLSAgICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpOworICAg
IC8vIEltcG9ydCBpdGVtcyBmcm9tIHdlYiBwcm9jZXNzIGlmIGl0ZW1zIGFyZSBub3Qgc3RvcmVk
IG9uIGRpc2suCisgICAgaWYgKCFpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAgICBTdHJpbmcgb2xkVmFsdWU7CiAg
ICAgICAgIGJvb2wgcXVvdGFFeGNlcHRpb247CkBAIC0zMTEsOSArMzE3LDEwIEBAIHZvaWQgU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVl
ZGVkKCkgY29uc3QKICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5h
Z2VyKCktPm1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKTsKICAgICAvLyBXZSBvcGVuIHRo
ZSBkYXRhYmFzZSBoZXJlIGV2ZW4gaWYgd2UndmUgYWxyZWFkeSBpbXBvcnRlZCBvdXIgaXRlbXMg
dG8gZW5zdXJlIHRoYXQgdGhlIGRhdGFiYXNlIGlzIG9wZW4gaWYgd2UgbmVlZCB0byB3cml0ZSB0
byBpdC4KICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX3F1ZXVlLmNvcHlSZWYoKSwgbV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLmNvcHlSZWYoKSwgbV9zZWN1cml0eU9yaWdpbik7CisgICAgICAgIG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX3F1ZXVlLmNvcHlSZWYoKSwgKm1fbG9j
YWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX2xvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlciwgbV9zZWN1cml0eU9yaWdpbik7CiAKICAgICBpZiAobV9kaWRJbXBvcnRJdGVt
c0Zyb21EYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzUwLDE0ICszNTcsMTMgQEAgU3Rv
cmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNl
KFN0b3JhZ2VNYW5hZ2VyJiBzdG8KIAogU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6fkxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCiB7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZUFy
ZWFNYXAuaXNFbXB0eSgpKTsKIH0KIAotYXV0byBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNl
Y3VyaXR5T3JpZ2luKSAtPiBSZWY8U3RvcmFnZUFyZWE+CithdXRvIFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW5EYXRhJiYgc2VjdXJpdHlPcmlnaW4sIElzRXBoZW1lcmFsIGlzRXBoZW1lcmFsKSAtPiBSZWY8
U3RvcmFnZUFyZWE+CiB7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBwcm90ZWN0ZWRTdG9yYWdl
QXJlYTsKICAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFNYXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2lu
LCBbJl0oKSBtdXRhYmxlIHsKLSAgICAgICAgcHJvdGVjdGVkU3RvcmFnZUFyZWEgPSBTdG9yYWdl
QXJlYTo6Y3JlYXRlKHRoaXMsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRl
cyk7CisgICAgICAgIHByb3RlY3RlZFN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZShp
c0VwaGVtZXJhbCA9PSBJc0VwaGVtZXJhbDo6WWVzID8gbnVsbHB0ciA6IHRoaXMsIFdURk1vdmUo
c2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7CiAgICAgICAgIHJldHVybiBwcm90ZWN0
ZWRTdG9yYWdlQXJlYS5nZXQoKTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC0zODMs
MTAgKzM4OSwyNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6
OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29ucwogCiB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHsKLSAg
ICBmb3IgKGF1dG8qIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKKyAg
ICBmb3IgKGF1dG8gc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQogICAg
ICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKIH0KIAorVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6ZXBoZW1lcmFsT3JpZ2lu
cygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMo
KSkgeworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OkxvY2Fs
U3RvcmFnZU5hbWVzcGFjZTo6Y2xvbmVUbyhMb2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2Fs
U3RvcmFnZU5hbWVzcGFjZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3N0b3JhZ2VBcmVh
TWFwKQorICAgICAgICBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UubV9zdG9yYWdlQXJlYU1hcC5h
ZGQocGFpci5rZXksIHBhaXIudmFsdWUtPmNsb25lKCkpOworfQorCiBjbGFzcyBTdG9yYWdlTWFu
YWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGUodW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKQEAg
LTQ4MywxMSArNTA1LDExIEBAIFJlZjxTdG9yYWdlTWFuYWdlcj4gU3RvcmFnZU1hbmFnZXI6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkKIAogU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQog
ICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdl
TWFuYWdlciIpKQotICAgICwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksIGxvY2FsU3RvcmFn
ZURpcmVjdG9yeSkpCi0gICAgLCBtX2lzRXBoZW1lcmFsKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5p
c051bGwoKSkKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGVuY29kaW5nIGlzIGluaXRpYWxpemVk
IGJlZm9yZSB3ZSBzdGFydCBkaXNwYXRjaGluZyB0aGluZ3MgdG8gdGhlIHF1ZXVlLgogICAgIFVU
RjhFbmNvZGluZygpOworICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQor
ICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlciA9IExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6Y3JlYXRlKG1fcXVldWUuY29weVJlZigpLCBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6flN0b3JhZ2VNYW5hZ2VyKCkKQEAgLTU0OCw2ICs1
NzAsMTMgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHUKICAgICAgICAgQVNTRVJUKG5ld1Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKTsKIAogICAgICAgICBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+
Y2xvbmVUbygqbmV3U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOworCisgICAgICAgIGlmICghbV9s
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UgPSBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMuZ2V0KHN0b3JhZ2VO
YW1lc3BhY2VJRCkpIHsKKyAgICAgICAgICAgICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIG5l
d2xvY2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7CisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5jbG9uZVRvKCpuZXdsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTYyOSw4ICs2NTgsMTUgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8
V2ViQ29yZTo6U2VjdXIKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0
YT4gb3JpZ2luczsKIAotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLT5vcmlnaW5zKCkpCi0gICAgICAgICAgICBvcmlnaW5zLmFkZChvcmln
aW4pOworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIt
Pm9yaWdpbnMoKSkKKyAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1l
U3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGxvY2FsU3RvcmFnZU5hbWVTcGFjZS0+ZXBoZW1lcmFs
T3JpZ2lucygpKQorICAgICAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFs
dWVzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogdHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLT5vcmlnaW5zKCkpCkBAIC02NDYsNyArNjgyLDkgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8
V2ViQ29yZTo6U2VjdXIKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBhdXRvIG9yaWdpbkRldGFpbHMgPSBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+
b3JpZ2luRGV0YWlscygpOworICAgICAgICBWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjpPcmlnaW5EZXRhaWxzPiBvcmlnaW5EZXRhaWxzOworICAgICAgICBpZiAobV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIpCisgICAgICAgICAgICBvcmlnaW5EZXRhaWxzID0gbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXItPm9yaWdpbkRldGFpbHMoKTsKIAogICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW29yaWdpbkRldGFpbHMgPSBXVEZNb3ZlKG9yaWdpbkRldGFp
bHMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5EZXRh
aWxzKSk7CkBAIC02NjMsMjMgKzcwMSwyOSBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVM
b2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YQogICAg
ICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNp
ZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKICAgICAgICAgICAgIHRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihj
b3BpZWRPcmlnaW4pOwogCi0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5k
ZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4oY29waWVkT3JpZ2luKTsKKyAgICAgICAgaWYgKG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihjb3BpZWRPcmlnaW4pOwogICAg
IH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW5z
TW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgdGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUg
PSBtX2xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci0+ZGF0YWJhc2VzTW9kaWZpZWRTaW5jZSh0
aW1lKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQot
ICAgICAgICAgICAgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhckFsbFN0b3Jh
Z2VBcmVhcygpOworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpIHsK
KyAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRhdGFiYXNlc01vZGlmaWVkU2luY2UodGltZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICAgICAgICAg
IHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsK
IAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnNUb0RlbGV0ZSkgewor
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiBvcmlnaW5zVG9EZWxldGUpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9j
YWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxT
dG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKG9yaWdpbik7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhbFN0b3JhZ2VO
YW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCi0gICAgICAgICAg
ICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5jbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3Jp
Z2luKG9yaWdpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAg
ICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpAQCAtNzAyLDcgKzc0Niw4IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTCiAgICAgICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKICAgICAgICAg
ICAgICAgICB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmNsZWFyU3RvcmFnZUFyZWFz
TWF0Y2hpbmdPcmlnaW4ob3JpZ2luKTsKIAotICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihvcmlnaW4pOworICAgICAgICAg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKQorICAgICAgICAgICAgICAgIG1f
bG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4ob3Jp
Z2luKTsKICAgICAgICAgfQogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC03MTIsNyArNzU3LDYgQEAgdm9pZCBTdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlMKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0
X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdp
bkRhdGEpCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9y
YWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJp
dHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBBU1NFUlQo
IW1faXNFcGhlbWVyYWwpOwogICAgICAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb25J
RCwgc3RvcmFnZU1hcElEKTsKIAogICAgICAgICBBU1NFUlQoKEhhc2hNYXA8c3RkOjpwYWlyPElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj46
OmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKSk7CkBAIC03MjQsNyAr
NzY4LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QKICAgICAgICAgTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQpOwogICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdl
TmFtZXNwYWNlKTsKIAotICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRh
KSk7CisgICAgICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdl
dE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEpLCBtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlciA/IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U6OklzRXBoZW1lcmFsOjpObyA6IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U6OklzRXBoZW1lcmFsOjpZZXMpOwogICAgICAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVu
ZXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOwogCiAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKQEAgLTc0Miw3ICs3ODYsNyBAQCB2b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLAogICAgICAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29u
bmVjdGlvbklEKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgUmVmPFN0
b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52YWx1ZTsKLSAgICAgICAgICAgIGlmICghYXJlYS0+aXNT
ZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICAgICAgaWYgKCFhcmVhLT5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJp
dHlPcmlnaW4oKS0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5z
ZWN1cml0eU9yaWdpbigpLmdldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc3
MiwxMSArODE2LDYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxT
dG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKIHZvaWQgU3RvcmFnZU1hbmFn
ZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3Vy
aXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSkKIHsKICAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQg
PSBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlE
LCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCld
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgICAgICBt
X2VwaGVtZXJhbFN0b3JhZ2UuYWRkKHNlY3VyaXR5T3JpZ2luRGF0YSwgV2ViQ29yZTo6U3RvcmFn
ZU1hcDo6Y3JlYXRlKGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZXMuaXNWYWxpZEtleShzdG9yYWdlTmFtZXNwYWNlSUQpKTsKIAogICAgICAgICBT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSogc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgPSBtX3Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlcy5nZXQoc3RvcmFnZU5hbWVzcGFjZUlEKTsKQEAgLTgxNCw3ICs4
NTMsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0bwogICAgICAgICBpdC0+dmFsdWUtPnJlbW92
ZUxpc3RlbmVyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKTsKIAogICAgICAgICAvLyBEb24n
dCByZW1vdmUgc2Vzc2lvbiBzdG9yYWdlIG1hcHMuIFRoZSB3ZWIgcHJvY2VzcyBtYXkgcmVjb25u
ZWN0IGFuZCBleHBlY3QgdGhlIGRhdGEgdG8gc3RpbGwgYmUgYXJvdW5kLgotICAgICAgICBpZiAo
aXQtPnZhbHVlLT5pc1Nlc3Npb25TdG9yYWdlKCkpCisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlz
RXBoZW1lcmFsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zdG9yYWdlQXJl
YXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKQEAg
LTgzMiwxNCArODcxLDExIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyhJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpCiB7CiAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVj
dGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5
T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFwU2VlZCwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAg
ICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBz
dG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlkR2V0VmFsdWVzKGNvbm5lY3Rpb24uZ2V0KCks
IHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU1hcC0+aXRlbXMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24g
c3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdu
b3JlIGl0LgorCisgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3Ig
YSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAg
aWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgICAgIHJldHVybiBkaWRHZXRWYWx1ZXMoY29ubmVj
dGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCB7IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgfQorCiAgICAgICAgIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBz
dG9yYWdlTWFwSUQsIHN0b3JhZ2VBcmVhLT5pdGVtcygpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFw
OjpEaWRHZXRWYWx1ZXMoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOwogICAgIH0pOwpA
QCAtODQ5LDE3ICs4ODUsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2kKIHsKICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25u
ZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJp
dHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCBrZXkgPSBrZXkuaXNvbGF0ZWRDb3B5KCksIHZhbHVlID0g
dmFsdWUuaXNvbGF0ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHko
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFy
ZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgaWYgKCFzdG9yYWdl
QXJlYSkgewotICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9y
aWdpbkRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVl
biBjbG9zZWQuIElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9y
YWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUg
aXQuCisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KIAogICAgICAgICBib29sIHF1b3RhRXJyb3I7CiAgICAgICAgIHN0b3JhZ2VBcmVhLT5z
ZXRJdGVtKGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwg
dmFsdWUsIHVybFN0cmluZywgcXVvdGFFcnJvcik7CkBAIC04NzksMTYgKzkwOCwxMCBAQCB2b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
V2ViQ29yZTo6U2VjdXJpdHlPcgogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rp
b24pLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5
KCksIHN0b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIGtl
eSA9IGtleS5pc29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29w
eSgpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdl
QXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICBpZiAoIXN0b3Jh
Z2VBcmVhKSB7Ci0gICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5
T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQuIElnbm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdl
IGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQu
CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KIAogICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLT51bmlxdWVJ
RCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIHVybFN0cmluZyk7CiAgICAgICAgIGNvbm5l
Y3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3Jh
Z2VNYXBTZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQpOwpAQCAtODk5LDEyICs5MjIsMTAgQEAgdm9p
ZCBTdG9yYWdlTWFuYWdlcjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkQKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0
aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29w
eSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCB1
cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAg
IGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0
b3JhZ2VNYXBJRCk7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgICAgIGlm
IChtX2lzRXBoZW1lcmFsKQotICAgICAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1v
dmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9u
IHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIEln
bm9yZSBpdC4KKworICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9y
IGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAg
IGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAg
ICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3Rv
cmFnZUFyZWFJRCwgdXJsU3RyaW5nKTsKICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElE
KTsKQEAgLTkzMSw3ICs5NTIsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjp3YWl0VW50aWxXcml0
ZXNGaW5pc2hlZCgpCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX2lzRXBoZW1l
cmFsKQorICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIExvY2tlcjxMb2NrPiBzdGF0ZUxvY2tlcihtX3N0YXRlTG9jayk7CkBAIC05
NTYsNyArOTc3LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OnJlc3VtZSgpCiB7Ci0gICAgaWYgKG1faXNFcGhlbWVyYWwpCisgICAgaWYgKCFtX2xvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgTG9ja2VyPExvY2s+
IHN0YXRlTG9ja2VyKG1fc3RhdGVMb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggZjZjMDMyMjEw
MTg1ZjA1MWM5MjYwODEwNDY2MzM2MjQ3MDA5MjQ5OS4uNWE3NzY1ZTNiY2FkNGI2MWQxYzIyMzA0
YjdhNmMxMWZlNGQ0Mjc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBw
cml2YXRlOgogCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKIAotICAgIFJlZjxMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXI+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOworICAg
IFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+IG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U+PiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXM7CiAKICAgICBIYXNoTWFwPHN0ZDo6cGFp
cjx1aW50NjRfdCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiwgUmVmUHRyPFRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
czsKQEAgLTExMyw5ICsxMTMsNiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+
PiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhLCBSZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3Rv
cmFnZTsKLSAgICBib29sIG1faXNFcGhlbWVyYWwgeyBmYWxzZSB9OwotCiAgICAgZW51bSBjbGFz
cyBTdGF0ZSB7CiAgICAgICAgIFJ1bm5pbmcsCiAgICAgICAgIFdpbGxTdXNwZW5kLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAu
Y3BwCmluZGV4IDBlOTQyOTYwNDllNmMwODdhYjZlOGYwYzVlYmZlNGMxYTJlMmMwNzguLmRkNzQz
YTlmOTY5YzRkZDAxNTY1OTkxMGJkNzM2NWY4YjdlYjNiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI5
NCw3ICsyOTQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCh1
aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdAogICAgICAgICBhcHBseUNoYW5n
ZShrZXksIG5ld1ZhbHVlKTsKICAgICB9CiAKLSAgICBpZiAoc3RvcmFnZVR5cGUoKSA9PSBTdG9y
YWdlVHlwZTo6U2Vzc2lvbikKKyAgICBpZiAoc3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlVHlwZTo6
U2Vzc2lvbiB8fCBzdG9yYWdlVHlwZSgpID09IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCkK
ICAgICAgICAgZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KHNvdXJjZVN0b3JhZ2VBcmVhSUQs
IGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpOwogICAgIGVsc2UKICAgICAgICAg
ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudChzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKTsKQEAgLTMwNyw5ICszMDcsNyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhTWFwOjpjbGVhckNhY2hlKCkKIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hT
ZXNzaW9uU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVl
LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoc3RvcmFnZVR5cGUoKSA9
PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7Ci0KLSAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNz
aW9uIHN0b3JhZ2UgbmFtZXNwYWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKKyAg
ICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlcyBhbmQgZXBo
ZW1lcmFsIGxvY2FsIHN0b3JhZ2UgbmFtZXNwYWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFn
ZSBJRHMKICAgICAvLyBzbyB3ZSBjYW4gZ2V0IHRoZSByaWdodCBwYWdlIGhlcmUuCiAgICAgV2Vi
UGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UobWFrZU9iamVj
dElkZW50aWZpZXI8UGFnZUlkZW50aWZpZXJUeXBlPihtX3N0b3JhZ2VOYW1lc3BhY2VJRCkpOwog
ICAgIGlmICghd2ViUGFnZSkKQEAgLTM3Nyw2ICszNzUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFw
Ojpjb25uZWN0KCkKIAogICAgIHN3aXRjaCAobV9zdG9yYWdlVHlwZSkgewogICAgIGNhc2UgU3Rv
cmFnZVR5cGU6OkxvY2FsOgorICAgIGNhc2UgU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOgog
ICAgIGNhc2UgU3RvcmFnZVR5cGU6OlRyYW5zaWVudExvY2FsOgogICAgICAgICBpZiAoU2VjdXJp
dHlPcmlnaW4qIHRvcExldmVsT3JpZ2luID0gbV9zdG9yYWdlTmFtZXNwYWNlLT50b3BMZXZlbE9y
aWdpbigpKQogICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VN
YW5hZ2VyOjpDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIG1f
c3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5k
YXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIDApOwpAQCAtMzg1LDE0ICszODQsMTAg
QEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU3RvcmFnZVR5cGU6OlNlc3Npb246CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAobV9zdG9yYWdlTWFw
SUQsIG1fc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlP
cmlnaW4tPmRhdGEoKSksIDApOwotICAgICAgICBpZiAobV9zdG9yYWdlTWFwKQotICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtcyht
X3N0b3JhZ2VNYXBJRCwgbV9zdG9yYWdlTWFwLT5pdGVtcygpKSwgMCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX3N0b3Jh
Z2VNYXApCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdl
cjo6U2V0SXRlbXMobV9zdG9yYWdlTWFwSUQsIG1fc3RvcmFnZU1hcC0+aXRlbXMoKSksIDApOwog
ICAgIG1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
CmluZGV4IDdlYTVlN2RkOTAyNDJlMzYwZWYyZjA5OWJkZWVlNjc5YWNjYzVlNDcuLmY1OWM3OWI3
ZmEyYmUyZmM5YTcyMDUyYzFiOWU1M2NiNmEzMjNmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAKQEAgLTQ3LDEyICs0NywxMiBAQCBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aQogCiBSZWY8U3Rv
cmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVFcGhlbWVyYWxM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJ
bkJ5dGVzKQogewotICAgIHJldHVybiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShpZGVu
dGlmaWVyLCBxdW90YUluQnl0ZXMpOworICAgIHJldHVybiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UoaWRlbnRpZmllciwgcXVvdGFJbkJ5dGVzLCBJc0VwaGVtZXJhbDo6WWVzKTsKIH0KIAot
UmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlTG9j
YWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5C
eXRlcykKK1JlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNy
ZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBx
dW90YUluQnl0ZXMsIElzRXBoZW1lcmFsIGlzRXBoZW1lcmFsKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRp
ZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3RvcmFnZU5hbWVzcGFjZUltcGwoaXNFcGhlbWVyYWwgPT0gSXNFcGhlbWVyYWw6OlllcyA/IFN0
b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCA6IFN0b3JhZ2VUeXBlOjpMb2NhbCwgaWRlbnRpZmll
ciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CiB9CiAKIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1w
bD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2
ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCmluZGV4
IDY3NTdlM2I4MTg4ODZjNGZmNTdiYzNlNzlmNGMxNTgwMGY3NWIxYmMuLmVhNmQ1NTE4Y2RmYzk5
ZGMzYTAxZDg1N2UzNjYzNjUwZjliNjY2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaApAQCAtNDEs
NyArNDEsOSBAQCBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpT
dG9yYWdlTmFtZXNwYWNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsPiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVy
LCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFj
ZUltcGw+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVu
dGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwotICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlm
aWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOworCisgICAgZW51bSBjbGFzcyBJc0VwaGVtZXJh
bCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1w
bD4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2ln
bmVkIHF1b3RhSW5CeXRlcywgSXNFcGhlbWVyYWwgaXNFcGhlbWVyYWwpOwogICAgIHN0YXRpYyBS
ZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2
ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRlcyk7CiAKICAgICB2aXJ0dWFsIH5TdG9yYWdl
TmFtZXNwYWNlSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKaW5k
ZXggOWE2YjZmMzcwMGEwYjk1ODUxZGVhODEwNmZjYmIzMmE0YjMwNzNmMS4uODhhOTNjNWQ1MDQy
YTEyNjM0MTFjNjg0YmVkYmQ1MDZlMzRiNWEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNw
YWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsCiAK
IFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKIHsKLSAgICBy
ZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSht
X2lkZW50aWZpZXIsIHF1b3RhKTsKKyAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNy
ZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShtX2lkZW50aWZpZXIsIHF1b3RhLCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6SXNFcGhlbWVyYWw6Ok5vKTsKIH0KIAogUmVmPFdlYkNvcmU6OlN0b3JhZ2VO
YW1lc3BhY2U+IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbE9yaWdp
biwgdW5zaWduZWQgcXVvdGEpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZDZiM2RjMjc5YjBiOGQwY2ViZmQ2NzRjNDRlMjE0ZmZiNmQ2NjE1MS4u
ODI3OGFhZWJkMGRlMWY2MDZhNTlhOWNiOTg1NjM3Y2JkNTA1NjFkNSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5
LTA2LTA0ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFdLV2Vi
c2l0ZURhdGFTdG9yZSBBUEkgZmFpbHMgdG8gZmV0Y2ggd2ViIHN0b3JhZ2UgZGF0YSBmb3Igbm9u
LXBlcnNpc3RlbnQgZGF0YSBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4MzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3Rl
bnNlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJz
aXRlRGF0YXN0b3JlLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTkt
MDYtMDQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtt
aXNjXSBSZW1vdmUgSlNDT25seSBBUk12NyBUcmFkaXRpb25hbCBib3QKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJzaXRlRGF0YXN0b3JlLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3Rv
cmUubW0KaW5kZXggODdjNDEyNDNjNjgyMDcxODZhYmMzYzUwMjRjYzViYTVjMzgyMGMwZi4uZjk3
ODc4ODBlMjc0ZjM0NjFmZmM2ZmQ2YTQ1NDUyNDk5ZDIzZGNkMyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3RvcmUubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYnNpdGVEYXRhc3Rv
cmUubW0KQEAgLTM1MCw0ICszNTAsNDYgQEAgVEVTVChXZWJLaXQsIFNldHRpbmdOb25QZXJzaXN0
ZW50RGF0YVN0b3JlUGF0aHNUaHJvd3NFeGNlcHRpb24pCiAgICAgW2NvbmZpZ3VyYXRpb24gc2V0
U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyOkAiY29tLmFwcGxlLlNhZmFyaSJd
OwogfQogCitURVNUKFdLV2Vic2l0ZURhdGFTdG9yZSwgRmV0Y2hOb25QZXJzaXN0ZW50V2ViU3Rv
cmFnZSkKK3sKKyAgICBhdXRvIG5vblBlcnNpc3RlbnREYXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0
YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0V2Vic2l0ZURhdGFTdG9yZTpub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOYXZpZ2F0aW9u
VGVzdERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6QCI8c2NyaXB0PnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Nlc3Npb24nLCAnc3RvcmFn
ZScpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2NhbCcsICdzdG9yYWdlJyk7PC9zY3JpcHQ+IiBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2xvY2FsaG9zdCJdXTsKKyAgICBb
bmF2aWdhdGlvbkRlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKworICAgIHJl
YWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
IndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdzZXNzaW9uJykiIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW0Aic3Rv
cmFnZSIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAgICByZWFkeVRvQ29udGludWUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9jYWwnKSIg
Y29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBF
Q1RfVFJVRShbQCJzdG9yYWdlIiBpc0VxdWFsVG9TdHJpbmc6cmVzdWx0XSk7CisgICAgICAgIHJl
YWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWFkeVRvQ29udGludWUpOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7Cisg
ICAgW25vblBlcnNpc3RlbnREYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0
IHNldFdpdGhPYmplY3Q6V0tXZWJzaXRlRGF0YVR5cGVTZXNzaW9uU3RvcmFnZV0gY29tcGxldGlv
bkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKmRhdGFSZWNvcmRzKSB7
CisgICAgICAgIEVYUEVDVF9FUSgoaW50KWRhdGFSZWNvcmRzLmNvdW50LCAxKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoW1tbZGF0YVJlY29yZHMgb2JqZWN0QXRJbmRleDowXSBkaXNwbGF5TmFtZV0g
aXNFcXVhbFRvU3RyaW5nOkAibG9jYWxob3N0Il0pOworICAgICAgICByZWFkeVRvQ29udGludWUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFtub25QZXJzaXN0
ZW50RGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0
OldLV2Vic2l0ZURhdGFUeXBlTG9jYWxTdG9yYWdlXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJy
YXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqZGF0YVJlY29yZHMpIHsKKyAgICAgICAgRVhQRUNU
X0VRKChpbnQpZGF0YVJlY29yZHMuY291bnQsIDEpOworICAgICAgICBFWFBFQ1RfVFJVRShbW1tk
YXRhUmVjb3JkcyBvYmplY3RBdEluZGV4OjBdIGRpc3BsYXlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6
QCJsb2NhbGhvc3QiXSk7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworfQorCiB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>