<?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>175139</bug_id>
          
          <creation_ts>2017-08-03 10:28:12 -0700</creation_ts>
          <short_desc>Network cache should be usable as non-singleton</short_desc>
          <delta_ts>2017-08-04 10:02:53 -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>Page Loading</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1334824</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 10:28:12 -0700</bug_when>
    <thetext>Currently we always use it as a singleton. We might want to use it as backend for cache web API and should make it work as a non-singleton instance too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334953</commentid>
    <comment_count>1</comment_count>
      <attachid>317158</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 14:40:47 -0700</bug_when>
    <thetext>Created attachment 317158
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334975</commentid>
    <comment_count>2</comment_count>
      <attachid>317167</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 15:27:40 -0700</bug_when>
    <thetext>Created attachment 317167
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334987</commentid>
    <comment_count>3</comment_count>
      <attachid>317168</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 15:34:05 -0700</bug_when>
    <thetext>Created attachment 317168
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335002</commentid>
    <comment_count>4</comment_count>
      <attachid>317168</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-03 16:03:52 -0700</bug_when>
    <thetext>Comment on attachment 317168
patch

Nice! This also has the nice side effect that if we want to do targeted unit testing of it, it&apos;s much more straight forward.

One thing that might make things a little nicer, though could be left for later, is to make the NetworkProcess object, which is a singleton, own the NetworkCache instance, any make accessing the singleton be via NetworkProcess::singleton()-&gt;diskCache() (or whatever).  It would also make the calls to NetworkCache::Cache::open() that don&apos;t use their return values much less mysterious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335004</commentid>
    <comment_count>5</comment_count>
      <attachid>317168</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-03 16:07:47 -0700</bug_when>
    <thetext>Comment on attachment 317168
patch

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

r=me when it all builds

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:121
&gt; +            NetworkCache::Cache::open(m_diskCacheDirectory, cacheOptions);

This feels too mysterious.  While I think you should store the Cache ref here, maybe for now just a comment explaining what&apos;s happening.

&gt; Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp:124
&gt; +    NetworkCache::Cache::open(m_diskCacheDirectory, cacheOptions);

This feels too mysterious.  While I think you should store the Cache ref here, maybe for now just a comment explaining what&apos;s happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335177</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 01:26:09 -0700</bug_when>
    <thetext>&gt; One thing that might make things a little nicer, though could be left for
&gt; later, is to make the NetworkProcess object, which is a singleton, own the
&gt; NetworkCache instance, any make accessing the singleton be via
&gt; NetworkProcess::singleton()-&gt;diskCache() (or whatever).  It would also make
&gt; the calls to NetworkCache::Cache::open() that don&apos;t use their return values
&gt; much less mysterious.

Good point. I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335210</commentid>
    <comment_count>7</comment_count>
      <attachid>317233</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 04:34:13 -0700</bug_when>
    <thetext>Created attachment 317233
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335214</commentid>
    <comment_count>8</comment_count>
      <attachid>317236</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 05:21:36 -0700</bug_when>
    <thetext>Created attachment 317236
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335215</commentid>
    <comment_count>9</comment_count>
      <attachid>317236</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-04 05:23:01 -0700</bug_when>
    <thetext>Comment on attachment 317236
patch

Rejecting attachment 317236 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-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 317236, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
a/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 54, in run
    if changelog_entry.has_valid_reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Full output: http://webkit-queues.webkit.org/results/4252602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335218</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 05:44:04 -0700</bug_when>
    <thetext>&gt; AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Huh?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335220</commentid>
    <comment_count>11</comment_count>
      <attachid>317238</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 05:45:06 -0700</bug_when>
    <thetext>Created attachment 317238
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335227</commentid>
    <comment_count>12</comment_count>
      <attachid>317238</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-04 06:25:06 -0700</bug_when>
    <thetext>Comment on attachment 317238
patch

Clearing flags on attachment: 317238

Committed r220267: &lt;http://trac.webkit.org/changeset/220267&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335228</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-04 06:25:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335229</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-04 06:25:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/33723415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335288</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-04 09:40:12 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; 
&gt; One thing that might make things a little nicer, though could be left for
&gt; later, is to make the NetworkProcess object, which is a singleton, own the
&gt; NetworkCache instance, any make accessing the singleton be via
&gt; NetworkProcess::singleton()-&gt;diskCache() (or whatever).  

Actually we need to do better than that (and now we can) because it&apos;s faulty to only have a singleton network cache.

This is because the WebKit API now supports multiple persistent data stores, yet all NetworkResourceLoaders with persistent data stores share the same NetworkCache.

We need to have a map of sessionIDs to NetworkCaches (each pointing to a unique location on disk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335296</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-04 09:57:49 -0700</bug_when>
    <thetext>That should be pretty easy to implement now though it is not clear to me why someone would want split caches within a single client. Some sort of weaker private browsing mode? Things like cache shrinking policy in presence of multiple caches would need to be resolved.

Another approach for that would be to keep a single cache instance but include a data store identifier with the cache key. This would allow data deduplication and existing shrinking policy to function to work without any extra effort.

Or maybe we want to have multiple Cache instances that share the same Storage backend. We are not far architecturally from supporting that either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335300</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-04 10:02:53 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #16)
&gt; That should be pretty easy to implement now though it is not clear to me why
&gt; someone would want split caches within a single client. Some sort of weaker
&gt; private browsing mode? Things like cache shrinking policy in presence of
&gt; multiple caches would need to be resolved.
&gt; 
&gt; Another approach for that would be to keep a single cache instance but
&gt; include a data store identifier with the cache key. This would allow data
&gt; deduplication and existing shrinking policy to function to work without any
&gt; extra effort.
&gt; 
&gt; Or maybe we want to have multiple Cache instances that share the same
&gt; Storage backend. We are not far architecturally from supporting that either.

I&apos;m not sure which one of these approaches is better, but we should analyze and pick one to move forward with.

Upcoming OSes have clients with multiple sessions in the same Networking Process.
Ping me on IRC for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317158</attachid>
            <date>2017-08-03 14:40:47 -0700</date>
            <delta_ts>2017-08-03 15:27:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-2.patch</filename>
            <type>text/plain</type>
            <size>45662</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyMzEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxNy0wOC0wMyAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBjYWNoZSBzaG91bGQg
YmUgdXNhYmxlIGFzIG5vbi1zaW5nbGV0b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTEzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGl0IGFzIGEgbm9uLXNpbmds
ZXRvbiBpbiB0aGUgZnV0dXJlIChmb3IgZXhhbXBsZSBhcyBhIGJhY2tlbmQgZm9yIHRoZSBjYWNo
ZSBBUEkpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgTmV0d29ya0NhY2hlOjpDYWNoZSBh
bmQgTmV0d29ya0NhY2hlOjpTdG9yYWdlIHJlZmNvdW50ZWQgb2JqZWN0cyBhbmQgdGFrZXMKKyAg
ICAgICAgY2FyZSB0byByZWYgdGhlbSBwcm9wZXJseSBkdXJpbmcgYXN5bmNocm9ub3VzIG9wZXJh
dGlvbnMuCisKKyAgICAgICAgVGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgY3JlYXRlIGFueSBu
b24tc2hhcmVkIGluc3RhbmNlcywgaXQganVzdCBhZGRzIHRoZSBjYXBhYmlsaXR5LgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJp
dmVkRGF0YVRvQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAg
KFdlYktpdDo6Y2xlYXJEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKworICAgICAgICAgICAgSW5jbHVkZSBzaGFy
ZWQgY2FjaGUgYXMgYSByZWZmZWQgbWVtYmVyIGZvciBub24tZXBoZW1lcmFsIGluc3RhbmNlcy4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVzZUNhY2hlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNh
Y2hlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnRyeVN0b3JlQXNDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6c2hh
cmVkSW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNoYXJlZCk6CisK
KyAgICAgICAgICAgIFJlcGxhY2Ugc2luZ2xldG9uIHdpdGggYSBnbG9iYWwgc2hhcmVkIGluc3Rh
bmNlIHRoYXQgY2FuIGJlIG51bGwgaWYgdGhlIGNhY2hlIGhhcyBub3QgYmVlbiBvcGVuZWQuCisK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6b3Blbik6CisKKyAgICAgICAg
ICAgIE9wZW4gbm93IHJldHVybnMgbnVsbCBpZiBpdCBmYWlscy4KKyAgICAgICAgICAgIFRoZSBu
ZXcgU2hhcmVkSW5zdGFuY2Ugb3B0aW9uIGNhbiBiZSBzZXQgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xv
YmFsIHNoYXJlZCBpbnN0YW5jZS4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNh
Y2hlOjpDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6On5DYWNo
ZSk6CisKKyAgICAgICAgICAgIEFkZCBkZXN0cnVjdG9yLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6ZHVtcEZpbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpDYWNoZTo6c2V0Q2FwYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFByb3RlY3QgdGhlIGNhY2hlIGluc3Rh
bmNlIGR1cmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Q2FjaGU6OnN0b3JlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjp0
cmF2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmR1bXBDb250
ZW50c1RvRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmNsZWFy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmVjb3Jkc1BhdGggY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZXRyaWV2ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmlzRW5hYmxlZCBj
b25zdCk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFJlbW92ZSBpc0VuYWJsZWQoKSBzdGF0ZSBh
cyBhIGNhY2hlIG9iamVjdCBub3cgYWx3YXlzIHJlcHJlc2VudHMgYW4gZW5hYmxlZCBjYWNoZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6aW5pdGlhbGl6ZVNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlRnJvbVN0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjp3aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxv
YWQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3BlY3VsYXRpdmVMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6UmVhZE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6V3JpdGVPcGVyYXRpb246
OldyaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpUcmF2ZXJzZU9wZXJhdGlvbjo6VHJhdmVyc2VPcGVyYXRpb24pOgorCisgICAgICAgICAgICBP
cGVyYXRpb25zIG5vdyByZWYgdGhlIHN0b3JhZ2UuIFRoZXkgYXJlIGFscmVhZHkgZGVsZXRlZCBp
biB0aGUgbWFpbiB0aHJlYWQgc28KKyAgICAgICAgICAgIHByb3BlciBkZXN0cnVjdGlvbiBpcyB0
YWtlbiBjYXJlIG9mLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6
b3Blbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6flN0b3JhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnN5bmNocm9uaXplKToK
KworICAgICAgICAgICAgVGhpcyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIG1ldGhvZHMgbm93IHBy
b3RlY3QgdGhlIFN0b3JhZ2UgaW5zdGFuY2UuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0
b3JhZ2U6OnJldHJpZXZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6dHJhdmVy
c2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzaHJpbmspOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29j
b2EpOgorCiAyMDE3LTA4LTAzICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMDIwOS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OndyaXQKIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJpdmVk
RGF0YVRvQ2FjaGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGFLZXkmIGRhdGFLZXks
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKIHsKLSAgICBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwor
ICAgIGlmICghTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRD
YXB0dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShy
ZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDkgKzMyOCw5IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnVwZGF0ZUNvb2tpZVBhcnRpdGkKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hl
RW50cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVu
dHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
Ci0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICBp
ZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpKSB7CiAgICAgICAgIEhhc2hN
YXA8U2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwotICAgICAg
ICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRTaXpl
cyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgeworICAgICAgICBjYWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RG
TW92ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAgVmVjdG9y
PFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKIApAQCAtNDM2LDIwICs0MzYsMjAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUwogc3RhdGljIHZvaWQgY2xlYXJE
aXNrQ2FjaGVFbnRyaWVzKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5z
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxl
ZCgpKSB7CisgICAgaWYgKGF1dG8qIGNhY2hlID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgewog
ICAgICAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnNUb0RlbGV0ZTsK
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQogICAgICAgICAgICAgb3JpZ2lu
c1RvRGVsZXRlLmFkZChvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICAgICAgVmVjdG9y
PE5ldHdvcmtDYWNoZTo6S2V5PiBjYWNoZUtleXNUb0RlbGV0ZTsKLSAgICAgICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRlID0gV1RGTW92ZShvcmlnaW5zVG9EZWxl
dGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUoY2FjaGVLZXlzVG9EZWxldGUpXShhdXRv
KiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CisgICAgICAgIGNhY2hlLT50cmF2ZXJzZShbY2Fj
aGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdp
bnNUb0RlbGV0ZSA9IFdURk1vdmUob3JpZ2luc1RvRGVsZXRlKSwgY2FjaGVLZXlzVG9EZWxldGUg
PSBXVEZNb3ZlKGNhY2hlS2V5c1RvRGVsZXRlKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgewogICAgICAgICAgICAgaWYgKHRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbnNUb0RlbGV0ZS5jb250YWlucyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRyYXZl
cnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgpKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNhY2hlS2V5c1RvRGVsZXRlLmFwcGVuZCh0cmF2ZXJzYWxFbnRyeS0+ZW50cnkua2V5KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoY2FjaGVLZXlzVG9EZWxldGUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoY2FjaGVLZXlz
VG9EZWxldGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSk7CiAKQEAgLTU3NSw5ICs1NzUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1vZGVsKHVpbnQzCiAgICAgICAgIHVybENhY2hlRGlza0NhcGFjaXR5ID0gbV9k
aXNrQ2FjaGVTaXplT3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBh
dXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGlmIChu
ZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgbmV0d29ya0NhY2hlLnNldENhcGFj
aXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpKSB7CisgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0eSh1cmxDYWNoZURp
c2tDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBA
QCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiAgICAgLCBtX2Nvbm5l
Y3Rpb24oY29ubmVjdGlvbikKICAgICAsIG1fZGVmZXJzTG9hZGluZyhwYXJhbWV0ZXJzLmRlZmVy
c0xvYWRpbmcpCiAgICAgLCBtX2J1ZmZlcmluZ1RpbWVyKCp0aGlzLCAmTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKQorICAgICwgbV9jYWNoZShzZXNzaW9uSUQoKS5p
c0VwaGVtZXJhbCgpID8gbnVsbHB0ciA6IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSBvZiB0aGUgZXhpc3RlbmNlIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgaW4g
V2ViQ29yZS4KQEAgLTEyMSwxMCArMTIyLDEwIEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5l
dHdvcmtSZXNvdXJjZUwKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIGJvb2wgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpjYW5Vc2VDYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
IGNvbnN0CiB7Ci0gICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCisgICAgaWYgKCFtX2NhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KCFzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKTsKKwogICAgIGlmICghcmVxdWVzdC51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
b3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpEb05vdFVzZUFueUNh
Y2hlKQpAQCAtMTgxLDcgKzE4Miw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRy
aWV2ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkucmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBt
X3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIp
LCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CisgICAgbV9jYWNoZS0+cmV0cmlldmUocmVxdWVzdCwg
eyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhp
cywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CiAgICAg
ICAgIGlmIChsb2FkZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVy
IGhhcyBiZWVuIGFib3J0ZWQgYW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4K
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNyw3ICszMDgsNyBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAgICBpZiAoY2FuVXNlQ2FjaGUobV9uZXR3b3JrTG9h
ZC0+Y3VycmVudFJlcXVlc3QoKSkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGFscmVhZHkg
aGF2ZSB1c2VkIGRhdGEgZnJvbSB0aGlzIGluY29tcGxldGUgbG9hZC4gRW5zdXJlIG9sZGVyIHZl
cnNpb25zIGRvbid0IHJlbWFpbiBpbiB0aGUgY2FjaGUgYWZ0ZXIgY2FuY2VsLgogICAgICAgICAg
ICAgaWYgKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkucmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOwor
ICAgICAgICAgICAgICAgIG1fY2FjaGUtPnJlbW92ZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVx
dWVzdCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNl
bCgpOwpAQCAtMzM0LDcgKzMzNSw3IEBAIGF1dG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmUKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBi
b29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0g
MzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVk
KSB7Ci0gICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndl
YlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlv
biA9IG1fY2FjaGUtPnVwZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiwgbV9yZXNwb25zZSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY29u
ZGl0aW9uYWwgdGhlbiB0aGlzIHJldmFsaWRhdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBieSB0aGUg
bmV0d29yayBjYWNoZSBhbmQgd2UgcGFzcyB0aGUgMzA0IHJlc3BvbnNlIHRvIFdlYkNvcmUuCiAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCkuaXNDb25kaXRpb25hbCgpKQogICAgICAg
ICAgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwpAQCAtNDcwLDcg
KzQ3MSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGkKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmIChjYW5Vc2VDYWNoZWRSZWRpcmVjdChyZXF1
ZXN0KSkKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0KHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgICAgIG1fY2Fj
aGUtPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1
ZXN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwogI2VuZGlmCkBAIC01NTks
NyArNTYwLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeVN0b3JlQXNDYQogICAg
IGlmICghbV9idWZmZXJlZERhdGFGb3JDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVz
dCgpLCBtX3Jlc3BvbnNlLCBXVEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVy
ID0gbWFrZVJlZigqdGhpcyldKGF1dG8mIG1hcHBlZEJvZHkpIG11dGFibGUgeworICAgIG1fY2Fj
aGUtPnN0b3JlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdU
Rk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0o
YXV0byYgbWFwcGVkQm9keSkgbXV0YWJsZSB7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJD
RSkKICAgICAgICAgaWYgKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC01ODgsNyArNTg5LDcgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogCiAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6
IG1fcGFyYW1ldGVycy5kZXJpdmVkQ2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZSkgewogICAgICAg
ICAgICAgTmV0d29ya0NhY2hlOjpEYXRhS2V5IGtleSB7IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hl
UGFydGl0aW9uKCksIHR5cGUsIGJvZHlIYXNoIH07Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpLnJldHJpZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKSwg
ZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBtX2NhY2hlLT5yZXRyaWV2ZURhdGEoa2V5
LCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyksIGVudHJ5UHRyLCB0eXBlLCByZXRyaWV2ZUNvdW50
XSAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50Kys7CiAgICAgICAgICAg
ICAgICAgYm9vbCByZXRyaWV2ZWRBbGwgPSBsb2FkZXItPm1fcmV0cmlldmVkRGVyaXZlZERhdGFD
b3VudCA9PSByZXRyaWV2ZUNvdW50OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRyeShyZXRyaWV2ZWRBbGwgPyBlbnRyeVB0ciA6IG51bGxw
dHIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsNiArMTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlRpbWVyIG1fYnVmZmVyaW5n
VGltZXI7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgUmVmUHRyPE5ldHdvcmtDYWNo
ZTo6Q2FjaGU+IG1fY2FjaGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9i
dWZmZXJlZERhdGFGb3JDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpF
bnRyeT4gbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbjsKICAgICBib29sIG1faXNXYWl0aW5nQ29u
dGludWVXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZWRSZWRpcmVjdCB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwzNCBAQCBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvdXJjZVR5cGUoCiAgICAgcmV0dXJuIHJlc291
cmNlOwogfQogCi1DYWNoZSYgc2luZ2xldG9uKCkKK3N0YXRpYyBSZWZQdHI8Q2FjaGU+JiBzaGFy
ZWRJbnN0YW5jZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5j
ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPENhY2hlPj4gaW5zdGFuY2U7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQogCitDYWNoZSogc2hhcmVkKCkKK3sKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2UoKS5nZXQoKTsKK30KKworUmVmUHRyPENhY2hlPiBDYWNoZTo6b3Blbihj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucykKK3sKKyAg
ICBhdXRvIHN0b3JhZ2UgPSBTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCwgb3B0aW9ucy5jb250YWlu
cyhPcHRpb246OlRlc3RpbmdNb2RlKSA/IFN0b3JhZ2U6Ok1vZGU6OlRlc3RpbmcgOiBTdG9yYWdl
OjpNb2RlOjpOb3JtYWwpOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgb3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIXN0b3JhZ2UpOworCisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY2FjaGUg
PSBhZG9wdFJlZigqbmV3IENhY2hlKHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKSwgb3B0aW9ucykp
OworCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpTaGFyZWRJbnN0YW5jZSkpCisg
ICAgICAgIHNoYXJlZEluc3RhbmNlKCkgPSBjYWNoZS5wdHIoKTsKKworICAgIHJldHVybiBjYWNo
ZTsKK30KKwogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIGR1bXBGaWxlQ2hhbmdlZChD
YWNoZSogY2FjaGUpCiB7CkBAIC03NSwxMCArOTcsOSBAQCBzdGF0aWMgdm9pZCBkdW1wRmlsZUNo
YW5nZWQoQ2FjaGUqIGNhY2hlCiB9CiAjZW5kaWYKIAotYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucykKK0NhY2hl
OjpDYWNoZShSZWY8U3RvcmFnZT4mJiBzdG9yYWdlLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25z
KQorICAgIDogbV9zdG9yYWdlKFdURk1vdmUoc3RvcmFnZSkpCiB7Ci0gICAgbV9zdG9yYWdlID0g
U3RvcmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpUZXN0aW5n
TW9kZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6Tm9ybWFsKTsK
LQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAg
ICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKSkg
ewogICAgICAgICBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFi
bGVkKSB7CkBAIC04Nyw0NCArMTA4LDQxIEBAIGJvb2wgQ2FjaGU6OmluaXRpYWxpemUoY29uc3Qg
U3RyaW5nJiBjYWMKICAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIgPSBu
dWxscHRyOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Nw
ZWN1bGF0aXZlTG9hZE1hbmFnZXIpOwotICAgICAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2Fk
TWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKm1fc3Rv
cmFnZSk7CisgICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyID0gc3RkOjpt
YWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPihtX3N0b3JhZ2UuZ2V0KCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgaWYgKCFtX2xvd1Bvd2VyTW9kZU5vdGlm
aWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVM
b2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKm1f
c3RvcmFnZSk7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KG1fc3RvcmFnZS5nZXQoKSk7CiAgICAg
fQogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OkVmZmljYWN5TG9n
Z2luZykpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4oY2FjaGVQYXRo
KTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6b3BlbihtX3N0b3JhZ2UtPmJh
c2VQYXRoKCkpOwogCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpTaGFyZWRJbnN0
YW5jZSkpIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBUcmlnZ2VycyB3aXRoICJub3Rp
Znl1dGlsIC1wIGNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuZHVtcCIuCi0gICAgaWYgKG1fc3RvcmFn
ZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJub3RpZnl1dGlsIC1wIGNvbS5hcHBsZS5X
ZWJLaXQuQ2FjaGUuZHVtcCIuCiAgICAgICAgIGludCB0b2tlbjsKICAgICAgICAgbm90aWZ5X3Jl
Z2lzdGVyX2Rpc3BhdGNoKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLCAmdG9rZW4sIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oaW50KSB7CiAgICAgICAgICAgICBkdW1wQ29udGVu
dHNUb0ZpbGUoKTsKICAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RL
KQotICAgIC8vIFRyaWdnZXJzIHdpdGggInRvdWNoICRjYWNoZVBhdGgvZHVtcCIuCi0gICAgaWYg
KG1fc3RvcmFnZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAkY2FjaGVQYXRo
L2R1bXAiLgogICAgICAgICBDU3RyaW5nIGR1bXBGaWxlUGF0aCA9IFdlYkNvcmU6OmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9zdG9y
YWdlLT5iYXNlUGF0aCgpLCAiZHVtcCIpKTsKICAgICAgICAgR1JlZlB0cjxHRmlsZT4gZHVtcEZp
bGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkdW1wRmlsZVBhdGguZGF0YSgpKSk7
CiAgICAgICAgIEdGaWxlTW9uaXRvciogbW9uaXRvciA9IGdfZmlsZV9tb25pdG9yX2ZpbGUoZHVt
cEZpbGUuZ2V0KCksIEdfRklMRV9NT05JVE9SX05PTkUsIG51bGxwdHIsIG51bGxwdHIpOwogICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobW9uaXRvciwgImNoYW5nZWQiLCBHX0NBTExC
QUNLKGR1bXBGaWxlQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KICNlbmRpZgorICAgIH0KK30KIAot
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9y
YWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwotICAgIHJldHVybiAhIW1fc3RvcmFnZTsK
K0NhY2hlOjp+Q2FjaGUoKQorewogfQogCiB2b2lkIENhY2hlOjpzZXRDYXBhY2l0eShzaXplX3Qg
bWF4aW11bVNpemUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2UpCi0gICAgICAgIHJldHVybjsKICAg
ICBtX3N0b3JhZ2UtPnNldENhcGFjaXR5KG1heGltdW1TaXplKTsKIH0KIApAQCAtMzE1LDcgKzMz
Myw2IEBAIHN0YXRpYyBTdG9yZURlY2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMKIAogdm9pZCBD
YWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9w
dHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVk
KCkpOwogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSk7
CiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVz
IHByaW9yaXR5ICVkIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpKTsKQEAgLTM1NSw3ICszNzIsNyBAQCB2
b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgYXV0byBzdGFydFRp
bWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICBhdXRvIHByaW9yaXR5
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CiAKLSAgICBtX3N0
b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcmVxdWVzdCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhcnRUaW1lLCBz
dG9yYWdlS2V5LCBmcmFtZUlEXShhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFnZS0+cmV0cmll
dmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNvcmQpIHsKICAg
ICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0
d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CiAKQEAgLTQwOCw3ICs0MjUsNiBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjptYWtlUmVkaXJlCiAKIHN0ZDo6dW5pcXVl
X3B0cjxFbnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBGdW5jdGlvbjx2b2lkIChN
YXBwZWRCb2R5Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKGlzRW5hYmxl
ZCgpKTsKICAgICBBU1NFUlQocmVzcG9uc2VEYXRhKTsKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHN0b3JpbmcgJXMsIHBhcnRpdGlvbiAlcyIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBtYWtlQ2FjaGVLZXkocmVxdWVzdCkucGFydGl0
aW9uKCkubGF0aW4xKCkuZGF0YSgpKTsKQEAgLTQzMyw3ICs0NDksNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zCiAgICAgYXV0byBjYWNoZUVudHJ5ID0gbWFrZUVu
dHJ5KHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlRGF0YSkpOwogICAgIGF1dG8g
cmVjb3JkID0gY2FjaGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKLSAgICBtX3N0
b3JhZ2UtPnN0b3JlKHJlY29yZCwgW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGNvbnN0IERhdGEmIGJvZHlEYXRhKSB7CisgICAgbV9zdG9yYWdl
LT5zdG9yZShyZWNvcmQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IERhdGEm
IGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKICNpZiBFTkFCTEUo
U0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAoY2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9k
eURhdGEoKSkgewpAQCAtNDUzLDggKzQ2OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2Fj
aGU6OnN0b3JlKGNvbnMKIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmVSZWRp
cmVjdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlZGlyZWN0UmVxdWVzdCkKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RvcmluZyByZWRpcmVjdCAl
cyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCByZWRpcmVj
dFJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogICAgIFN0b3JlRGVj
aXNpb24gc3RvcmVEZWNpc2lvbiA9IG1ha2VTdG9yZURlY2lzaW9uKHJlcXVlc3QsIHJlc3BvbnNl
LCAwKTsKQEAgLTQ5NSw4ICs1MDksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjp1
cGRhdGUoY29uCiAKIHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKIHsKLSAgICBB
U1NFUlQoaXNFbmFibGVkKCkpOwotCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsKIH0KIApA
QCAtNTA3LDE1ICs1MTksMTEgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cgogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgVmVjdG9yPEtleT4mIGtleXMsIEZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKGlzRW5hYmxl
ZCgpKTsKLQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBDYWNoZTo6dHJhdmVyc2UoRnVuY3Rpb248dm9pZCAoY29uc3Qg
VHJhdmVyc2FsRW50cnkqKT4mJiB0cmF2ZXJzZUhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKGlzRW5h
YmxlZCgpKTsKLQogICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjbGllbnRzIG1ha2luZyBleGNlc3Np
dmUgdHJhdmVyc2FsIHJlcXVlc3RzLgogICAgIGNvbnN0IHVuc2lnbmVkIG1heGltdW1UcmF2ZXJz
ZUNvdW50ID0gMzsKICAgICBpZiAobV90cmF2ZXJzZUNvdW50ID49IG1heGltdW1UcmF2ZXJzZUNv
dW50KSB7CkBAIC01MjksNyArNTM3LDcgQEAgdm9pZCBDYWNoZTo6dHJhdmVyc2UoRnVuY3Rpb248
dm9pZCAoY29ucwogCiAgICAgKyttX3RyYXZlcnNlQ291bnQ7CiAKLSAgICBtX3N0b3JhZ2UtPnRy
YXZlcnNlKHJlc291cmNlVHlwZSgpLCAwLCBbdGhpcywgdHJhdmVyc2VIYW5kbGVyID0gV1RGTW92
ZSh0cmF2ZXJzZUhhbmRsZXIpXShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29yZCwgY29uc3Qg
U3RvcmFnZTo6UmVjb3JkSW5mbyYgcmVjb3JkSW5mbykgeworICAgIG1fc3RvcmFnZS0+dHJhdmVy
c2UocmVzb3VyY2VUeXBlKCksIDAsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIHRyYXZlcnNlSGFuZGxlciA9IFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKV0oY29uc3QgU3Rv
cmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8mIHJlY29yZElu
Zm8pIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIC0tbV90cmF2ZXJzZUNv
dW50OwogICAgICAgICAgICAgdHJhdmVyc2VIYW5kbGVyKG51bGxwdHIpOwpAQCAtNTUyLDggKzU2
MCw2IEBAIFN0cmluZyBDYWNoZTo6ZHVtcEZpbGVQYXRoKCkgY29uc3QKIAogdm9pZCBDYWNoZTo6
ZHVtcENvbnRlbnRzVG9GaWxlKCkKIHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAgICAgICAgcmV0
dXJuOwogICAgIGF1dG8gZmQgPSBXZWJDb3JlOjpvcGVuRmlsZShkdW1wRmlsZVBhdGgoKSwgV2Vi
Q29yZTo6T3BlbkZvcldyaXRlKTsKICAgICBpZiAoIVdlYkNvcmU6OmlzSGFuZGxlVmFsaWQoZmQp
KQogICAgICAgICByZXR1cm47CkBAIC02MjAsMTAgKzYyNiw2IEBAIHZvaWQgQ2FjaGU6OmNsZWFy
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2wKICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICBt
X3N0YXRpc3RpY3MtPmNsZWFyKCk7CiAKLSAgICBpZiAoIW1fc3RvcmFnZSkgewotICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQogICAgIFN0cmluZyBhbnlUeXBlOwogICAgIG1fc3RvcmFnZS0+
Y2xlYXIoYW55VHlwZSwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCkBAIC02MzcsMTMgKzYzOSwxMSBAQCB2b2lkIENhY2hlOjpjbGVhcigpCiAKIFN0cmluZyBD
YWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0b3JhZ2UgPyBtX3N0
b3JhZ2UtPnJlY29yZHNQYXRoKCkgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlLT5y
ZWNvcmRzUGF0aCgpOwogfQogCiB2b2lkIENhY2hlOjpyZXRyaWV2ZURhdGEoY29uc3QgRGF0YUtl
eSYgZGF0YUtleSwgRnVuY3Rpb248dm9pZCAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAg
ICAgS2V5IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07CiAgICAgbV9zdG9yYWdl
LT5yZXRyaWV2ZShrZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoYXV0byByZWNvcmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQgfHwgIXJlY29y
ZC0+Ym9keS5zaXplKCkpIHsKQEAgLTY1Nyw4ICs2NTcsNiBAQCB2b2lkIENhY2hlOjpyZXRyaWV2
ZURhdGEoY29uc3QgRGF0YUtleSYgCiAKIHZvaWQgQ2FjaGU6OnN0b3JlRGF0YShjb25zdCBEYXRh
S2V5JiBkYXRhS2V5LCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBp
ZiAoIW1fc3RvcmFnZSkKLSAgICAgICAgcmV0dXJuOwogICAgIEtleSBrZXkgeyBkYXRhS2V5LCBt
X3N0b3JhZ2UtPnNhbHQoKSB9OwogICAgIFN0b3JhZ2U6OlJlY29yZCByZWNvcmQgeyBrZXksIHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpLCB7IH0sIERhdGEgeyBkYXRhLCBzaXplIH0s
IHsgfSB9OwogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCB7IH0pOwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCShyZXZp
c2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2FjaGVfaAotI2Rl
ZmluZSBOZXR3b3JrQ2FjaGVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKIApAQCAtNTAsNyArNDksNyBAQCBjbGFzcyBDYWNoZTsKIGNsYXNzIFNwZWN1bGF0aXZl
TG9hZE1hbmFnZXI7CiBjbGFzcyBTdGF0aXN0aWNzOwogCi1DYWNoZSYgc2luZ2xldG9uKCk7CitD
YWNoZSogc2hhcmVkKCk7CiAKIHN0cnVjdCBNYXBwZWRCb2R5IHsKICNpZiBFTkFCTEUoU0hBUkVB
QkxFX1JFU09VUkNFKQpAQCAtOTEsMjIgKzkwLDIwIEBAIGVudW0gY2xhc3MgVXNlRGVjaXNpb24g
ewogCiB1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpwYWlyPHVpbnQ2NF90IC8qd2ViUGFnZUlE
Ki8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKIAotY2xhc3MgQ2FjaGUgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENhY2hlKTsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ry
b3llZDxDYWNoZT47CitjbGFzcyBDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlPiB7CiBw
dWJsaWM6CiAgICAgZW51bSBjbGFzcyBPcHRpb24gewotICAgICAgICBFZmZpY2FjeUxvZ2dpbmcg
PSAxIDw8IDAsCisgICAgICAgIFNoYXJlZEluc3RhbmNlID0gMSA8PCAwLAorICAgICAgICBFZmZp
Y2FjeUxvZ2dpbmcgPSAxIDw8IDEsCiAgICAgICAgIC8vIEluIHRlc3RpbmcgbW9kZSB3ZSB0cnkg
dG8gZWxpbWluYXRlIHNvdXJjZXMgb2YgcmFuZG9tbmVzcy4gQ2FjaGUgZG9lcyBub3Qgc2hyaW5r
IGFuZCB0aGVyZSBhcmUgbm8gcmVhZCB0aW1lb3V0cy4KLSAgICAgICAgVGVzdGluZ01vZGUgPSAx
IDw8IDEsCisgICAgICAgIFRlc3RpbmdNb2RlID0gMSA8PCAyLAogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICAgICAgU3BlY3VsYXRpdmVSZXZh
bGlkYXRpb24gPSAxIDw8IDIsCisgICAgICAgIFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uID0gMSA8
PCAzLAogI2VuZGlmCiAgICAgfTsKLSAgICBib29sIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgsIE9wdGlvblNldDxPcHRpb24+KTsKLSAgICB2b2lkIHNldENhcGFjaXR5KHNpemVf
dCk7CisgICAgc3RhdGljIFJlZlB0cjxDYWNoZT4gb3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0
aCwgT3B0aW9uU2V0PE9wdGlvbj4pOwogCi0gICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiAhIW1fc3RvcmFnZTsgfQorICAgIHZvaWQgc2V0Q2FwYWNpdHkoc2l6ZV90KTsKIAogICAg
IC8vIENvbXBsZXRpb24gaGFuZGxlciBtYXkgZ2V0IGNhbGxlZCBiYWNrIHN5bmNocm9ub3VzbHkg
b24gZmFpbHVyZS4KICAgICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9w
dHI8RW50cnk+KT4mJik7CkBAIC0xMzUsMjIgKzEzMiwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wQ29udGVudHNUb0ZpbGUoKTsKIAogICAgIFN0cmluZyByZWNvcmRzUGF0aCgpIGNvbnN0Owot
ICAgIGJvb2wgY2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKSBjb25zdCB7IHJldHVybiBt
X3N0b3JhZ2UgJiYgbV9zdG9yYWdlLT5jYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpOyB9
CisgICAgYm9vbCBjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcmFnZS0+Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKTsgfQogCiAjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIFNwZWN1bGF0
aXZlTG9hZE1hbmFnZXIqIHNwZWN1bGF0aXZlTG9hZE1hbmFnZXIoKSB7IHJldHVybiBtX3NwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuZ2V0KCk7IH0KICNlbmRpZgogCisgICAgfkNhY2hlKCk7CisKIHBy
aXZhdGU6Ci0gICAgQ2FjaGUoKSA9IGRlZmF1bHQ7Ci0gICAgfkNhY2hlKCkgPSBkZWxldGU7Cisg
ICAgQ2FjaGUoUmVmPFN0b3JhZ2U+JiYsIE9wdGlvblNldDxPcHRpb24+IG9wdGlvbnMpOwogCiAg
ICAgS2V5IG1ha2VDYWNoZUtleShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKIAog
ICAgIFN0cmluZyBkdW1wRmlsZVBhdGgoKSBjb25zdDsKICAgICB2b2lkIGRlbGV0ZUR1bXBGaWxl
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gbV9zdG9yYWdlOworICAgIFJlZjxT
dG9yYWdlPiBtX3N0b3JhZ2U7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVf
UkVWQUxJREFUSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpMb3dQb3dlck1vZGVO
b3RpZmllcj4gbV9sb3dQb3dlck1vZGVOb3RpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlcj4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOwpAQCAtMTYzLDQg
KzE2MSwzIEBAIHByaXZhdGU6CiB9CiB9CiAjZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogI2lmIEVOQUJM
RShTSEFSRUFCTEVfUkVTT1VSQ0UpCiB2b2lkIEVudHJ5Ojppbml0aWFsaXplU2hhcmVhYmxlUmVz
b3VyY2VIYW5kbGVGcm9tU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLmNhblVzZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRhKCkpCisgICAg
aWYgKCFOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpIHx8ICFOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT5j
YW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHNoYXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRyeUNyZWF0ZVNo
YXJlZE1lbW9yeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAko
cmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCAr
NzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OndpbGxTZW5kUmVkaXJlY3RlZAogewogICAg
IExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICJTcGVjdWxhdGl2ZSByZWRp
cmVjdCAlcyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVk
aXJlY3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9jYWNo
ZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0KHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IHVzZSB0aGUgc2hhcmVkIGluc3RhbmNlLgorICAgIG1fY2FjaGVFbnRyeSA9IE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICAvLyBDcmVhdGUgYSBzeW50aGV0aWMgY2FjaGUg
ZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAgaWYgKCFtX2NhY2hlRW50cnkpCi0gICAgICAg
IG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkubWFrZVJlZGlyZWN0RW50
cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKKyAgICAgICAg
bV9jYWNoZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKS0+bWFrZVJlZGlyZWN0RW50cnko
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKIAogICAgIC8vIERv
bid0IGZvbGxvdyB0aGUgcmVkaXJlY3QuIFRoZSByZWRpcmVjdCB0YXJnZXQgd2lsbCBiZSByZWdp
c3RlcmVkIGZvciBzcGVjdWxhdGl2ZSBsb2FkIHdoZW4gaXQgaXMgbG9hZGVkLgogICAgIGRpZENv
bXBsZXRlKCk7CkBAIC04OSw3ICs5MCw3IEBAIGF1dG8gU3BlY3VsYXRpdmVMb2FkOjpkaWRSZWNl
aXZlUmVzcG9uc2UKIAogICAgIGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1fcmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKICAgICBpZiAodmFs
aWRhdGlvblN1Y2NlZWRlZCAmJiBtX2NhY2hlRW50cnkpCi0gICAgICAgIG1fY2FjaGVFbnRyeSA9
IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG1fb3JpZ2luYWxSZXF1ZXN0LCBtX2Zy
YW1lSUQsICptX2NhY2hlRW50cnksIG1fcmVzcG9uc2UpOworICAgICAgICBtX2NhY2hlRW50cnkg
PSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT51cGRhdGUobV9vcmlnaW5hbFJlcXVlc3QsIG1fZnJh
bWVJRCwgKm1fY2FjaGVFbnRyeSwgbV9yZXNwb25zZSk7CiAgICAgZWxzZQogICAgICAgICBtX2Nh
Y2hlRW50cnkgPSBudWxscHRyOwogCkBAIC0xMTUsMTAgKzExNiwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyhjCiAgICAgaWYgKG1fZGlkQ29tcGxldGUpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIW1fY2FjaGVFbnRyeSAmJiBtX2J1ZmZlcmVkRGF0YUZvckNh
Y2hlKSB7Ci0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCku
c3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWREYXRhRm9yQ2Fj
aGUuY29weVJlZigpLCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOworICAgICAgICBtX2NhY2hl
RW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT5zdG9yZShtX29yaWdpbmFsUmVxdWVzdCwg
bV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFGb3JDYWNoZS5jb3B5UmVmKCksIFtdKGF1dG8mIG1h
cHBlZEJvZHkpIHsgfSk7CiAgICAgICAgIC8vIENyZWF0ZSBhIHN5bnRoZXRpYyBjYWNoZSBlbnRy
eSBpZiB3ZSBjYW4ndCBzdG9yZS4KICAgICAgICAgaWYgKCFtX2NhY2hlRW50cnkgJiYgaXNTdGF0
dXNDb2RlQ2FjaGVhYmxlQnlEZWZhdWx0KG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkpCi0g
ICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLm1ha2VF
bnRyeShtX29yaWdpbmFsUmVxdWVzdCwgbV9yZXNwb25zZSwgV1RGTW92ZShtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKSk7CisgICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNo
YXJlZCgpLT5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIFdURk1vdmUo
bV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOwogICAgIH0KIAogICAgIGRpZENvbXBsZXRlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRp
c3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZwogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjpub3coKTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0
Y2goW3RoaXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENvcHkoKSwgbmV0
d29ya0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0ZWRDb3B5KCks
IHN0YXJ0VGltZV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3Ro
aXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENvcHkoKSwgbmV0d29ya0Nh
Y2hlUGF0aCA9IHNoYXJlZCgpLT5yZWNvcmRzUGF0aCgpLCBzdGFydFRpbWVdIHsKICAgICAgICAg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rp
b25Db3VudGVyOwogCiAgICAgICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKFdl
YkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkpCkBAIC0xNzgsNyArMTc4LDcgQEAg
dm9pZCBTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAKICAgICBjbGVhcigpOwogCi0gICAg
c2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbmV0d29ya0NhY2hlUGF0
aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICBzZXJp
YWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBuZXR3b3JrQ2FjaGVQYXRoID0g
c2hhcmVkKCktPnJlY29yZHNQYXRoKCldIHsKICAgICAgICAgYm9vdHN0cmFwRnJvbU5ldHdvcmtD
YWNoZShuZXR3b3JrQ2FjaGVQYXRoKTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNoZSBzaHJpbmsgY29tcGxldGVkIG1fYXBwcm94aW1h
dGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQpKTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjIw
MTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTQgKzUzLDE3IEBAIHN0YXRpYyBkb3Vi
bGUgY29tcHV0ZVJlY29yZFdvcnRoKEZpbGVUaW0KIHN0cnVjdCBTdG9yYWdlOjpSZWFkT3BlcmF0
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBSZWFkT3Bl
cmF0aW9uKGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxl
dGlvbkhhbmRsZXIpCi0gICAgICAgIDoga2V5KGtleSkKKyAgICBSZWFkT3BlcmF0aW9uKFN0b3Jh
Z2UmIHN0b3JhZ2UsIGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIDogc3RvcmFnZShzdG9yYWdlKQorICAgICAgICAs
IGtleShrZXkpCiAgICAgICAgICwgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpCiAgICAgeyB9CiAKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIGJvb2wgZmluaXNo
KCk7CiAKKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IEtleSBrZXk7CiAg
ICAgY29uc3QgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAg
ICAKQEAgLTk5LDExICsxMDIsMTMgQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5p
c2goKQogc3RydWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBSZWNvcmQmIHJl
Y29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKLSAgICAgICAgOiBy
ZWNvcmQocmVjb3JkKQorICAgIFdyaXRlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0
IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQor
ICAgICAgICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCByZWNvcmQocmVjb3JkKQogICAg
ICAgICAsIG1hcHBlZEJvZHlIYW5kbGVyKFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKQogICAg
IHsgfQotICAgIAorICAgIFJlZjxTdG9yYWdlPiBzdG9yYWdlOworCiAgICAgY29uc3QgUmVjb3Jk
IHJlY29yZDsKICAgICBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciBtYXBwZWRCb2R5SGFuZGxlcjsK
IApAQCAtMTEzLDExICsxMTgsMTMgQEAgcHVibGljOgogc3RydWN0IFN0b3JhZ2U6OlRyYXZlcnNl
T3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBU
cmF2ZXJzZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3Ms
IFRyYXZlcnNlSGFuZGxlciYmIGhhbmRsZXIpCi0gICAgICAgIDogdHlwZSh0eXBlKQorICAgIFRy
YXZlcnNlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IFN0cmluZyYgdHlwZSwgVHJh
dmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgaGFuZGxlcikKKyAgICAgICAgOiBz
dG9yYWdlKHN0b3JhZ2UpCisgICAgICAgICwgdHlwZSh0eXBlKQogICAgICAgICAsIGZsYWdzKGZs
YWdzKQogICAgICAgICAsIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKICAgICB7IH0KKyAgICBS
ZWY8U3RvcmFnZT4gc3RvcmFnZTsKIAogICAgIGNvbnN0IFN0cmluZyB0eXBlOwogICAgIGNvbnN0
IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CkBAIC0xNDksNyArMTU2LDcgQEAgc3RhdGljIFN0cmluZyBt
YWtlU2FsdEZpbGVQYXRoKGNvbnN0IFN0cgogICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobWFrZVZlcnNpb25lZERpcmVjdG9yeVBhdGgoYmFzZURpcmVjdG9yeVBh
dGgpLCBzYWx0RmlsZU5hbWUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gU3RvcmFn
ZTo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgTW9kZSBtb2RlKQorUmVmUHRyPFN0b3Jh
Z2U+IFN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUgbW9kZSkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTgsNyArMTY1LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oYwogICAgIGF1dG8gc2FsdCA9IHJl
YWRPck1ha2VTYWx0KG1ha2VTYWx0RmlsZVBhdGgoY2FjaGVQYXRoKSk7CiAgICAgaWYgKCFzYWx0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFN0
b3JhZ2U+KG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0b3JhZ2UoY2FjaGVQYXRoLCBtb2RlLCAqc2FsdCkpOwogfQogCiB2b2lk
IHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRUeXBlLCBjb25zdCBSZWNvcmRGaWxlVHJhdmVyc2VGdW5jdGlvbiYgZnVu
Y3Rpb24pCkBAIC0yMjYsNiArMjMzLDEyIEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBiYXNlRGlyZWMKIAogU3RvcmFnZTo6flN0b3JhZ2UoKQogeworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgQVNTRVJUKG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQobV9hY3RpdmVUcmF2ZXJzZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
IW1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyk7CisgICAgQVNTRVJUKCFtX3Nocmlua0luUHJv
Z3Jlc3MpOwogfQogCiBTdHJpbmcgU3RvcmFnZTo6YmFzZVBhdGgoKSBjb25zdApAQCAtMjU4LDcg
KzI3MSw3IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgTE9HKE5ldHdvcmtD
YWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHN5bmNocm9uaXppbmcgY2FjaGUiKTsKIAot
ICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBiYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
ICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6bWFrZV91bmlx
dWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIGF1dG8gYmxvYkZpbHRlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCByZWNvcmRzU2l6ZSA9
IDA7CkBAIC0zMDksNiArMzIyLDggQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgpCiAgICAg
ICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKCkpOwogCiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjYWNoZSBzeW5j
aHJvbml6YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSV1IiwgcmVjb3Jkc1NpemUsIGNv
dW50KTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01NTQsOCAr
NTY5LDkgQEAgdm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiAKICAgICByZW1v
dmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhrZXkpOwogCi0gICAgc2VyaWFsQmFja2dyb3Vu
ZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5XSB7CisgICAgc2VyaWFsQmFja2dyb3VuZElP
UXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBr
ZXldICgpIG11dGFibGUgewogICAgICAgICBkZWxldGVGaWxlcyhrZXkpOworICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01NzMsMTIgKzU4OSwxNCBAQCB2b2lkIFN0b3Jh
Z2U6OnJlbW92ZShjb25zdCBWZWN0b3I8S2V5PiYgCiAgICAgICAgIGtleXNUb1JlbW92ZS51bmNo
ZWNrZWRBcHBlbmQoa2V5KTsKICAgICB9CiAKLSAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgp
LmRpc3BhdGNoKFt0aGlzLCBrZXlzVG9SZW1vdmUgPSBXVEZNb3ZlKGtleXNUb1JlbW92ZSksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
eworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShrZXlzVG9SZW1v
dmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUpCiAgICAgICAg
ICAgICBkZWxldGVGaWxlcyhrZXkpOwogCi0gICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikK
LSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKICAgICB9
KTsKIH0KIApAQCAtODA1LDcgKzgyMyw3IEBAIHZvaWQgU3RvcmFnZTo6cmV0cmlldmUoY29uc3Qg
S2V5JiBrZXksIHUKICAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZlV3JpdGVPcGVy
YXRpb25zLCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0aW9uPihrZXks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIHJlYWRPcGVyYXRpb24gPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlzLCBrZXksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJpb3JpdHlbcHJp
b3JpdHldLnByZXBlbmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAgZGlzcGF0Y2hQZW5k
aW5nUmVhZE9wZXJhdGlvbnMoKTsKIH0KQEAgLTgxOCw3ICs4MzYsNyBAQCB2b2lkIFN0b3JhZ2U6
OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkCiAgICAgaWYgKCFtX2NhcGFjaXR5KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxX
cml0ZU9wZXJhdGlvbj4ocmVjb3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSk7CisgICAg
YXV0byB3cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVPcGVyYXRpb24+KCp0
aGlzLCByZWNvcmQsIFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdX
cml0ZU9wZXJhdGlvbnMucHJlcGVuZChXVEZNb3ZlKHdyaXRlT3BlcmF0aW9uKSk7CiAKICAgICAv
LyBBZGQga2V5IHRvIHRoZSBmaWx0ZXIgYWxyZWFkeSBoZXJlIGFzIHdlIGRvIGxvb2t1cHMgZnJv
bSB0aGUgcGVuZGluZyBvcGVyYXRpb25zIHRvby4KQEAgLTg0MCw3ICs4NTgsNyBAQCB2b2lkIFN0
b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwCiAgICAgQVNTRVJUKHRyYXZlcnNlSGFu
ZGxlcik7CiAgICAgLy8gQXZvaWQgbm9uLXRocmVhZCBzYWZlIEZ1bmN0aW9uIGNvcGllcy4KIAot
ICAgIGF1dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRyYXZlcnNl
T3BlcmF0aW9uPih0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKKyAgICBh
dXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2ZXJzZU9wZXJh
dGlvbj4oKnRoaXMsIHR5cGUsIGZsYWdzLCBXVEZNb3ZlKHRyYXZlcnNlSGFuZGxlcikpOwogICAg
IGF1dG8mIHRyYXZlcnNlT3BlcmF0aW9uID0gKnRyYXZlcnNlT3BlcmF0aW9uUHRyOwogICAgIG1f
YWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmFkZChXVEZNb3ZlKHRyYXZlcnNlT3BlcmF0aW9uUHRy
KSk7CiAKQEAgLTkzNiw3ICs5NTQsNyBAQCB2b2lkIFN0b3JhZ2U6OmNsZWFyKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgCiAgICAgICAgIG1fYmxvYkZpbHRlci0+Y2xlYXIoKTsKICAgICBtX2FwcHJveGlt
YXRlUmVjb3Jkc1NpemUgPSAwOwogCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBtb2Rp
ZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgeworICAgIGlvUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2Rp
ZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewogICAgICAgICBh
dXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKICAgICAgICAgdHJhdmVyc2VS
ZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIHR5cGUsIFttb2RpZmllZFNpbmNlVGltZV0oY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wgaXNCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9yeVBhdGgpIHsK
ICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocmVjb3JkRGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUpOwpAQCAtOTUzLDExICs5NzEsMTAg
QEAgdm9pZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIAogICAgICAgICAvLyBU
aGlzIGNsZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0b3JhZ2Uuc3lu
Y2hyb25pemUoKTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBpZiAoY29tcGxl
dGlvbkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC0xMDE5
LDcgKzEwMzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBMT0coTmV0d29ya0Nh
Y2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIGNhY2hlIGFwcHJveGltYXRl
U2l6ZT0lenUgY2FwYWNpdHk9JXp1IiwgYXBwcm94aW1hdGVTaXplKCksIG1fY2FwYWNpdHkpOwog
Ci0gICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAgIGJhY2tncm91
bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRz
UGF0aCgpOwogICAgICAgICBTdHJpbmcgYW55VHlwZTsKICAgICAgICAgdHJhdmVyc2VSZWNvcmRz
RmlsZXMocmVjb3Jkc1BhdGgsIGFueVR5cGUsIFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCBpc0Js
b2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgewpAQCAtMTA0Myw3ICsxMDYw
LDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogICAgICAgICAgICAgfQogICAgICAgICB9KTsK
IAotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKV0gewogICAgICAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0gZmFsc2U7CiAg
ICAgICAgICAgICAvLyBXZSBjb3VsZCBzeW5jaHJvbml6ZSBkdXJpbmcgdGhlIHNocmluayB0cmF2
ZXJzYWwuIEhvd2V2ZXIgdGhpcyBpcyBmYXN0IGFuZCBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBqdXN0
IG9uZSBjb2RlIHBhdGguCiAgICAgICAgICAgICBzeW5jaHJvbml6ZSgpOwpAQCAtMTA1NSw3ICsx
MDcyLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiB2b2lkIFN0b3JhZ2U6OmRlbGV0ZU9s
ZFZlcnNpb25zKCkKIHsKLSAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7
CisgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBjYWNoZVBhdGggPSBi
YXNlUGF0aCgpOwogICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIFsmY2FjaGVQ
YXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7
CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkK
QEAgLTEwNzksNiArMTA5Niw4IEBAIHZvaWQgU3RvcmFnZTo6ZGVsZXRlT2xkVmVyc2lvbnMoKQog
CiAgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShvbGRWZXJzaW9uUGF0aCk7
CiAgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsgfSk7CiAgICAgfSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgTmV0d29ya0NhY2hlU3RvcmFnZV9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZVN0
b3JhZ2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIApAQCAt
NDUsMTEgKzQ0LDEwIEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBjbGFzcyBJT0NoYW5u
ZWw7CiAKLWNsYXNzIFN0b3JhZ2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2Up
OworY2xhc3MgU3RvcmFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlPiB7
CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBUZXN0aW5nIH07Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQ
YXRoLCBNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5n
JiBjYWNoZVBhdGgsIE1vZGUpOwogCiAgICAgc3RydWN0IFJlY29yZCB7CiAgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTkzLDQgKzE5MSwzIEBAIHZvaWQgdHJhdmVyc2VSZWNv
cmRzRmlsZXMoY29uc3QgU3RyaW5nJiAKIH0KIH0KICNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw3ICsxMDgsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRp
c2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkgewot
ICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbj4gY2FjaGVP
cHRpb25zOworICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlv
bj4gY2FjaGVPcHRpb25zIHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpTaGFyZWRJbnN0
YW5jZSB9OworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRF
bmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgY2FjaGVP
cHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6RWZmaWNhY3lMb2dnaW5nOwog
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
KQpAQCAtMTE3LDcgKzExOCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbikKICAgICAgICAgICAgICAgICBjYWNoZU9wdGlvbnMg
fD0gTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbjsK
ICNlbmRpZgotICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaW5pdGlh
bGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRpb25zKSkgeworICAgICAgICAgICAg
TmV0d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRp
b25zKTsKKworICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBEaXNhYmxlIE5TVVJMQ2FjaGUuCiAgICAgICAgICAgICAgICAgYXV0byB1
cmxDYWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0
eTowIGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgICAgICBbTlNV
UkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTg3LDEzICsxOTEsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xl
YXJEaXNrQ2FjaGUoc3RkOgogICAgICAgICBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwID0gZGlz
cGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBh
dXRvIGdyb3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKLSAgICBkaXNwYXRjaF9ncm91
cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQdHI8dm9pZCgp
Pjo6ZnJvbUNhbGxhYmxlKFtncm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIE5ldHdv
cmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmll
ZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3QgbmVjZXNzYXJ5
LgotICAgICAgICAgICAgY2xlYXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmdldCgpKTsKKyAg
ICBpZiAoTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgeworICAgICAgICBhdXRvIGdyb3VwID0gbV9j
bGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKKyAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3Jv
dXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIEJsb2NrUHRyPHZvaWQoKT46OmZyb21DYWxs
YWJsZShbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgTmV0d29ya0NhY2hl
OjpzaGFyZWQoKS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmllZFNpbmNlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUHJvYmFibHkgbm90IG5lY2Vzc2FyeS4KKyAg
ICAgICAgICAgICAgICBjbGVhck5TVVJMQ2FjaGUoZ3JvdXAsIG1vZGlmaWVkU2luY2UsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KS5nZXQo
KSk7CisgICAgfQogI2Vsc2UKICAgICBjbGVhck5TVVJMQ2FjaGUobV9jbGVhckNhY2hlRGlzcGF0
Y2hHcm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU1NCw3ICs1NTQsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3Jr
U2Vzc2lvbkNvY29hCiAgICAgaWYgKCFhbGxvd3NDZWxsdWxhckFjY2VzcykKICAgICAgICAgY29u
ZmlndXJhdGlvbi5hbGxvd3NDZWxsdWxhckFjY2VzcyA9IE5POwogICAgIAotICAgIGlmIChOZXR3
b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQorICAgIGlmIChOZXR3b3JrQ2FjaGU6
OnNoYXJlZCgpKQogICAgICAgICBjb25maWd1cmF0aW9uLlVSTENhY2hlID0gbmlsOwogICAgIAog
ICAgIGlmIChhdXRvJiBkYXRhID0gZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0
YSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317167</attachid>
            <date>2017-08-03 15:27:40 -0700</date>
            <delta_ts>2017-08-03 15:34:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-3.patch</filename>
            <type>text/plain</type>
            <size>45671</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyMzEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxNy0wOC0wMyAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBjYWNoZSBzaG91bGQg
YmUgdXNhYmxlIGFzIG5vbi1zaW5nbGV0b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTEzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGl0IGFzIGEgbm9uLXNpbmds
ZXRvbiBpbiB0aGUgZnV0dXJlIChmb3IgZXhhbXBsZSBhcyBhIGJhY2tlbmQgZm9yIHRoZSBjYWNo
ZSBBUEkpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgTmV0d29ya0NhY2hlOjpDYWNoZSBh
bmQgTmV0d29ya0NhY2hlOjpTdG9yYWdlIHJlZmNvdW50ZWQgb2JqZWN0cyBhbmQgdGFrZXMKKyAg
ICAgICAgY2FyZSB0byByZWYgdGhlbSBwcm9wZXJseSBkdXJpbmcgYXN5bmNocm9ub3VzIG9wZXJh
dGlvbnMuCisKKyAgICAgICAgVGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgY3JlYXRlIGFueSBu
b24tc2hhcmVkIGluc3RhbmNlcywgaXQganVzdCBhZGRzIHRoZSBjYXBhYmlsaXR5LgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJp
dmVkRGF0YVRvQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAg
KFdlYktpdDo6Y2xlYXJEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKworICAgICAgICAgICAgSW5jbHVkZSBzaGFy
ZWQgY2FjaGUgYXMgYSByZWZmZWQgbWVtYmVyIGZvciBub24tZXBoZW1lcmFsIGluc3RhbmNlcy4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVzZUNhY2hlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNh
Y2hlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnRyeVN0b3JlQXNDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6c2hh
cmVkSW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNoYXJlZCk6CisK
KyAgICAgICAgICAgIFJlcGxhY2Ugc2luZ2xldG9uIHdpdGggYSBnbG9iYWwgc2hhcmVkIGluc3Rh
bmNlIHRoYXQgY2FuIGJlIG51bGwgaWYgdGhlIGNhY2hlIGhhcyBub3QgYmVlbiBvcGVuZWQuCisK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6b3Blbik6CisKKyAgICAgICAg
ICAgIE9wZW4gbm93IHJldHVybnMgbnVsbCBpZiBpdCBmYWlscy4KKyAgICAgICAgICAgIFRoZSBu
ZXcgU2hhcmVkSW5zdGFuY2Ugb3B0aW9uIGNhbiBiZSBzZXQgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xv
YmFsIHNoYXJlZCBpbnN0YW5jZS4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNh
Y2hlOjpDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6On5DYWNo
ZSk6CisKKyAgICAgICAgICAgIEFkZCBkZXN0cnVjdG9yLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6ZHVtcEZpbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpDYWNoZTo6c2V0Q2FwYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFByb3RlY3QgdGhlIGNhY2hlIGluc3Rh
bmNlIGR1cmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Q2FjaGU6OnN0b3JlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjp0
cmF2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmR1bXBDb250
ZW50c1RvRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmNsZWFy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmVjb3Jkc1BhdGggY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZXRyaWV2ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmlzRW5hYmxlZCBj
b25zdCk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFJlbW92ZSBpc0VuYWJsZWQoKSBzdGF0ZSBh
cyBhIGNhY2hlIG9iamVjdCBub3cgYWx3YXlzIHJlcHJlc2VudHMgYW4gZW5hYmxlZCBjYWNoZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6aW5pdGlhbGl6ZVNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlRnJvbVN0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjp3aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxv
YWQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3BlY3VsYXRpdmVMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6UmVhZE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6V3JpdGVPcGVyYXRpb246
OldyaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpUcmF2ZXJzZU9wZXJhdGlvbjo6VHJhdmVyc2VPcGVyYXRpb24pOgorCisgICAgICAgICAgICBP
cGVyYXRpb25zIG5vdyByZWYgdGhlIHN0b3JhZ2UuIFRoZXkgYXJlIGFscmVhZHkgZGVsZXRlZCBp
biB0aGUgbWFpbiB0aHJlYWQgc28KKyAgICAgICAgICAgIHByb3BlciBkZXN0cnVjdGlvbiBpcyB0
YWtlbiBjYXJlIG9mLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6
b3Blbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6flN0b3JhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnN5bmNocm9uaXplKToK
KworICAgICAgICAgICAgVGhpcyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIG1ldGhvZHMgbm93IHBy
b3RlY3QgdGhlIFN0b3JhZ2UgaW5zdGFuY2UuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0
b3JhZ2U6OnJldHJpZXZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6dHJhdmVy
c2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzaHJpbmspOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29j
b2EpOgorCiAyMDE3LTA4LTAzICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMDIwOS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OndyaXQKIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJpdmVk
RGF0YVRvQ2FjaGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGFLZXkmIGRhdGFLZXks
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKIHsKLSAgICBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwor
ICAgIGlmICghTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRD
YXB0dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShy
ZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDkgKzMyOCw5IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnVwZGF0ZUNvb2tpZVBhcnRpdGkKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hl
RW50cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVu
dHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
Ci0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICBp
ZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpKSB7CiAgICAgICAgIEhhc2hN
YXA8U2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwotICAgICAg
ICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRTaXpl
cyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgeworICAgICAgICBjYWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RG
TW92ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAgVmVjdG9y
PFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKIApAQCAtNDM2LDIwICs0MzYsMjAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUwogc3RhdGljIHZvaWQgY2xlYXJE
aXNrQ2FjaGVFbnRyaWVzKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5z
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxl
ZCgpKSB7CisgICAgaWYgKGF1dG8qIGNhY2hlID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgewog
ICAgICAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnNUb0RlbGV0ZTsK
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQogICAgICAgICAgICAgb3JpZ2lu
c1RvRGVsZXRlLmFkZChvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICAgICAgVmVjdG9y
PE5ldHdvcmtDYWNoZTo6S2V5PiBjYWNoZUtleXNUb0RlbGV0ZTsKLSAgICAgICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRlID0gV1RGTW92ZShvcmlnaW5zVG9EZWxl
dGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUoY2FjaGVLZXlzVG9EZWxldGUpXShhdXRv
KiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CisgICAgICAgIGNhY2hlLT50cmF2ZXJzZShbY2Fj
aGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdp
bnNUb0RlbGV0ZSA9IFdURk1vdmUob3JpZ2luc1RvRGVsZXRlKSwgY2FjaGVLZXlzVG9EZWxldGUg
PSBXVEZNb3ZlKGNhY2hlS2V5c1RvRGVsZXRlKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgewogICAgICAgICAgICAgaWYgKHRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbnNUb0RlbGV0ZS5jb250YWlucyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRyYXZl
cnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgpKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNhY2hlS2V5c1RvRGVsZXRlLmFwcGVuZCh0cmF2ZXJzYWxFbnRyeS0+ZW50cnkua2V5KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoY2FjaGVLZXlzVG9EZWxldGUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoY2FjaGVLZXlz
VG9EZWxldGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSk7CiAKQEAgLTU3NSw5ICs1NzUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1vZGVsKHVpbnQzCiAgICAgICAgIHVybENhY2hlRGlza0NhcGFjaXR5ID0gbV9k
aXNrQ2FjaGVTaXplT3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBh
dXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGlmIChu
ZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgbmV0d29ya0NhY2hlLnNldENhcGFj
aXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpKSB7CisgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0eSh1cmxDYWNoZURp
c2tDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBA
QCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiAgICAgLCBtX2Nvbm5l
Y3Rpb24oY29ubmVjdGlvbikKICAgICAsIG1fZGVmZXJzTG9hZGluZyhwYXJhbWV0ZXJzLmRlZmVy
c0xvYWRpbmcpCiAgICAgLCBtX2J1ZmZlcmluZ1RpbWVyKCp0aGlzLCAmTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKQorICAgICwgbV9jYWNoZShzZXNzaW9uSUQoKS5p
c0VwaGVtZXJhbCgpID8gbnVsbHB0ciA6IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSBvZiB0aGUgZXhpc3RlbmNlIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgaW4g
V2ViQ29yZS4KQEAgLTEyMSwxMCArMTIyLDEwIEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5l
dHdvcmtSZXNvdXJjZUwKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIGJvb2wgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpjYW5Vc2VDYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
IGNvbnN0CiB7Ci0gICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCisgICAgaWYgKCFtX2NhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KCFzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKTsKKwogICAgIGlmICghcmVxdWVzdC51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
b3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpEb05vdFVzZUFueUNh
Y2hlKQpAQCAtMTgxLDcgKzE4Miw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRy
aWV2ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkucmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBt
X3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIp
LCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CisgICAgbV9jYWNoZS0+cmV0cmlldmUocmVxdWVzdCwg
eyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhp
cywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CiAgICAg
ICAgIGlmIChsb2FkZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVy
IGhhcyBiZWVuIGFib3J0ZWQgYW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4K
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNyw3ICszMDgsNyBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAgICBpZiAoY2FuVXNlQ2FjaGUobV9uZXR3b3JrTG9h
ZC0+Y3VycmVudFJlcXVlc3QoKSkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGFscmVhZHkg
aGF2ZSB1c2VkIGRhdGEgZnJvbSB0aGlzIGluY29tcGxldGUgbG9hZC4gRW5zdXJlIG9sZGVyIHZl
cnNpb25zIGRvbid0IHJlbWFpbiBpbiB0aGUgY2FjaGUgYWZ0ZXIgY2FuY2VsLgogICAgICAgICAg
ICAgaWYgKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkucmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOwor
ICAgICAgICAgICAgICAgIG1fY2FjaGUtPnJlbW92ZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVx
dWVzdCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNl
bCgpOwpAQCAtMzM0LDcgKzMzNSw3IEBAIGF1dG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmUKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBi
b29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0g
MzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVk
KSB7Ci0gICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndl
YlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlv
biA9IG1fY2FjaGUtPnVwZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiwgbV9yZXNwb25zZSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY29u
ZGl0aW9uYWwgdGhlbiB0aGlzIHJldmFsaWRhdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBieSB0aGUg
bmV0d29yayBjYWNoZSBhbmQgd2UgcGFzcyB0aGUgMzA0IHJlc3BvbnNlIHRvIFdlYkNvcmUuCiAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCkuaXNDb25kaXRpb25hbCgpKQogICAgICAg
ICAgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwpAQCAtNDcwLDcg
KzQ3MSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGkKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmIChjYW5Vc2VDYWNoZWRSZWRpcmVjdChyZXF1
ZXN0KSkKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0KHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgICAgIG1fY2Fj
aGUtPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1
ZXN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwogI2VuZGlmCkBAIC01NTks
NyArNTYwLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeVN0b3JlQXNDYQogICAg
IGlmICghbV9idWZmZXJlZERhdGFGb3JDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVz
dCgpLCBtX3Jlc3BvbnNlLCBXVEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVy
ID0gbWFrZVJlZigqdGhpcyldKGF1dG8mIG1hcHBlZEJvZHkpIG11dGFibGUgeworICAgIG1fY2Fj
aGUtPnN0b3JlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdU
Rk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0o
YXV0byYgbWFwcGVkQm9keSkgbXV0YWJsZSB7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJD
RSkKICAgICAgICAgaWYgKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC01ODgsNyArNTg5LDcgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogCiAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6
IG1fcGFyYW1ldGVycy5kZXJpdmVkQ2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZSkgewogICAgICAg
ICAgICAgTmV0d29ya0NhY2hlOjpEYXRhS2V5IGtleSB7IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hl
UGFydGl0aW9uKCksIHR5cGUsIGJvZHlIYXNoIH07Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpLnJldHJpZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKSwg
ZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBtX2NhY2hlLT5yZXRyaWV2ZURhdGEoa2V5
LCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyksIGVudHJ5UHRyLCB0eXBlLCByZXRyaWV2ZUNvdW50
XSAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50Kys7CiAgICAgICAgICAg
ICAgICAgYm9vbCByZXRyaWV2ZWRBbGwgPSBsb2FkZXItPm1fcmV0cmlldmVkRGVyaXZlZERhdGFD
b3VudCA9PSByZXRyaWV2ZUNvdW50OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRyeShyZXRyaWV2ZWRBbGwgPyBlbnRyeVB0ciA6IG51bGxw
dHIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsNiArMTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlRpbWVyIG1fYnVmZmVyaW5n
VGltZXI7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgUmVmUHRyPE5ldHdvcmtDYWNo
ZTo6Q2FjaGU+IG1fY2FjaGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9i
dWZmZXJlZERhdGFGb3JDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpF
bnRyeT4gbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbjsKICAgICBib29sIG1faXNXYWl0aW5nQ29u
dGludWVXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZWRSZWRpcmVjdCB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwzNCBAQCBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvdXJjZVR5cGUoCiAgICAgcmV0dXJuIHJlc291
cmNlOwogfQogCi1DYWNoZSYgc2luZ2xldG9uKCkKK3N0YXRpYyBSZWZQdHI8Q2FjaGU+JiBzaGFy
ZWRJbnN0YW5jZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5j
ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPENhY2hlPj4gaW5zdGFuY2U7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQogCitDYWNoZSogc2hhcmVkKCkKK3sKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2UoKS5nZXQoKTsKK30KKworUmVmUHRyPENhY2hlPiBDYWNoZTo6b3Blbihj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucykKK3sKKyAg
ICBhdXRvIHN0b3JhZ2UgPSBTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCwgb3B0aW9ucy5jb250YWlu
cyhPcHRpb246OlRlc3RpbmdNb2RlKSA/IFN0b3JhZ2U6Ok1vZGU6OlRlc3RpbmcgOiBTdG9yYWdl
OjpNb2RlOjpOb3JtYWwpOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgb3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIXN0b3JhZ2UpOworCisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY2FjaGUg
PSBhZG9wdFJlZigqbmV3IENhY2hlKHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKSwgb3B0aW9ucykp
OworCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpTaGFyZWRJbnN0YW5jZSkpCisg
ICAgICAgIHNoYXJlZEluc3RhbmNlKCkgPSBjYWNoZS5wdHIoKTsKKworICAgIHJldHVybiBXVEZN
b3ZlKGNhY2hlKTsKK30KKwogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIGR1bXBGaWxl
Q2hhbmdlZChDYWNoZSogY2FjaGUpCiB7CkBAIC03NSwxMCArOTcsOSBAQCBzdGF0aWMgdm9pZCBk
dW1wRmlsZUNoYW5nZWQoQ2FjaGUqIGNhY2hlCiB9CiAjZW5kaWYKIAotYm9vbCBDYWNoZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9u
cykKK0NhY2hlOjpDYWNoZShSZWY8U3RvcmFnZT4mJiBzdG9yYWdlLCBPcHRpb25TZXQ8T3B0aW9u
PiBvcHRpb25zKQorICAgIDogbV9zdG9yYWdlKFdURk1vdmUoc3RvcmFnZSkpCiB7Ci0gICAgbV9z
dG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9u
OjpUZXN0aW5nTW9kZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6
Tm9ybWFsKTsKLQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURB
VElPTikKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxp
ZGF0aW9uKSkgewogICAgICAgICBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb3JlOjpMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dl
ck1vZGVFbmFibGVkKSB7CkBAIC04Nyw0NCArMTA4LDQxIEBAIGJvb2wgQ2FjaGU6OmluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBjYWMKICAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1h
bmFnZXIgPSBudWxscHRyOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIpOwotICAgICAgICAgICAgICAgIG1fc3BlY3Vs
YXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdl
cj4oKm1fc3RvcmFnZSk7CisgICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
ID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPihtX3N0b3JhZ2UuZ2V0
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgaWYgKCFtX2xvd1Bvd2Vy
TW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1fc3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFu
YWdlcj4oKm1fc3RvcmFnZSk7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KG1fc3RvcmFnZS5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OkVm
ZmljYWN5TG9nZ2luZykpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4o
Y2FjaGVQYXRoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6b3BlbihtX3N0
b3JhZ2UtPmJhc2VQYXRoKCkpOwogCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpT
aGFyZWRJbnN0YW5jZSkpIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBUcmlnZ2VycyB3
aXRoICJub3RpZnl1dGlsIC1wIGNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuZHVtcCIuCi0gICAgaWYg
KG1fc3RvcmFnZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJub3RpZnl1dGlsIC1wIGNv
bS5hcHBsZS5XZWJLaXQuQ2FjaGUuZHVtcCIuCiAgICAgICAgIGludCB0b2tlbjsKICAgICAgICAg
bm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLCAm
dG9rZW4sIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oaW50KSB7CiAgICAgICAgICAgICBk
dW1wQ29udGVudHNUb0ZpbGUoKTsKICAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmCiAjaWYgUExB
VEZPUk0oR1RLKQotICAgIC8vIFRyaWdnZXJzIHdpdGggInRvdWNoICRjYWNoZVBhdGgvZHVtcCIu
Ci0gICAgaWYgKG1fc3RvcmFnZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAk
Y2FjaGVQYXRoL2R1bXAiLgogICAgICAgICBDU3RyaW5nIGR1bXBGaWxlUGF0aCA9IFdlYkNvcmU6
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9zdG9yYWdlLT5iYXNlUGF0aCgpLCAiZHVtcCIpKTsKICAgICAgICAgR1JlZlB0cjxHRmls
ZT4gZHVtcEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkdW1wRmlsZVBhdGgu
ZGF0YSgpKSk7CiAgICAgICAgIEdGaWxlTW9uaXRvciogbW9uaXRvciA9IGdfZmlsZV9tb25pdG9y
X2ZpbGUoZHVtcEZpbGUuZ2V0KCksIEdfRklMRV9NT05JVE9SX05PTkUsIG51bGxwdHIsIG51bGxw
dHIpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobW9uaXRvciwgImNoYW5nZWQi
LCBHX0NBTExCQUNLKGR1bXBGaWxlQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KICNlbmRpZgorICAg
IH0KK30KIAotICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBj
YWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwotICAgIHJldHVybiAhIW1f
c3RvcmFnZTsKK0NhY2hlOjp+Q2FjaGUoKQorewogfQogCiB2b2lkIENhY2hlOjpzZXRDYXBhY2l0
eShzaXplX3QgbWF4aW11bVNpemUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2UpCi0gICAgICAgIHJl
dHVybjsKICAgICBtX3N0b3JhZ2UtPnNldENhcGFjaXR5KG1heGltdW1TaXplKTsKIH0KIApAQCAt
MzE1LDcgKzMzMyw2IEBAIHN0YXRpYyBTdG9yZURlY2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMK
IAogdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQo
aXNFbmFibGVkKCkpOwogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSk7CiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRy
aWV2aW5nICVzIHByaW9yaXR5ICVkIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpKTsKQEAgLTM1NSw3ICsz
NzIsNyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgYXV0
byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICBhdXRv
IHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CiAK
LSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcmVx
dWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3Rh
cnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFn
ZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNv
cmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CiAKQEAgLTQwOCw3
ICs0MjUsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjptYWtlUmVkaXJlCiAKIHN0
ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBGdW5jdGlv
bjx2b2lkIChNYXBwZWRCb2R5Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
KGlzRW5hYmxlZCgpKTsKICAgICBBU1NFUlQocmVzcG9uc2VEYXRhKTsKIAogICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0b3JpbmcgJXMsIHBhcnRpdGlvbiAlcyIsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBtYWtlQ2FjaGVLZXkocmVxdWVz
dCkucGFydGl0aW9uKCkubGF0aW4xKCkuZGF0YSgpKTsKQEAgLTQzMyw3ICs0NDksNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zCiAgICAgYXV0byBjYWNoZUVudHJ5
ID0gbWFrZUVudHJ5KHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlRGF0YSkpOwog
ICAgIGF1dG8gcmVjb3JkID0gY2FjaGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAK
LSAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IERhdGEmIGJvZHlEYXRhKSB7CisgICAg
bV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGNv
bnN0IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKICNp
ZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAoY2FuVXNlU2hhcmVkTWVt
b3J5Rm9yQm9keURhdGEoKSkgewpAQCAtNDUzLDggKzQ2OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxF
bnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnMKIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6
c3RvcmVSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCkKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVk
KCkpOwotCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RvcmluZyBy
ZWRpcmVjdCAlcyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgp
LCByZWRpcmVjdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogICAg
IFN0b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbiA9IG1ha2VTdG9yZURlY2lzaW9uKHJlcXVlc3Qs
IHJlc3BvbnNlLCAwKTsKQEAgLTQ5NSw4ICs1MDksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IENhY2hlOjp1cGRhdGUoY29uCiAKIHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkK
IHsKLSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5
KTsKIH0KIApAQCAtNTA3LDE1ICs1MTksMTEgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IFdl
YkNvcmU6OlJlc291cgogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgVmVjdG9yPEtleT4mIGtl
eXMsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
KGlzRW5hYmxlZCgpKTsKLQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBDYWNoZTo6dHJhdmVyc2UoRnVuY3Rpb248dm9p
ZCAoY29uc3QgVHJhdmVyc2FsRW50cnkqKT4mJiB0cmF2ZXJzZUhhbmRsZXIpCiB7Ci0gICAgQVNT
RVJUKGlzRW5hYmxlZCgpKTsKLQogICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjbGllbnRzIG1ha2lu
ZyBleGNlc3NpdmUgdHJhdmVyc2FsIHJlcXVlc3RzLgogICAgIGNvbnN0IHVuc2lnbmVkIG1heGlt
dW1UcmF2ZXJzZUNvdW50ID0gMzsKICAgICBpZiAobV90cmF2ZXJzZUNvdW50ID49IG1heGltdW1U
cmF2ZXJzZUNvdW50KSB7CkBAIC01MjksNyArNTM3LDcgQEAgdm9pZCBDYWNoZTo6dHJhdmVyc2Uo
RnVuY3Rpb248dm9pZCAoY29ucwogCiAgICAgKyttX3RyYXZlcnNlQ291bnQ7CiAKLSAgICBtX3N0
b3JhZ2UtPnRyYXZlcnNlKHJlc291cmNlVHlwZSgpLCAwLCBbdGhpcywgdHJhdmVyc2VIYW5kbGVy
ID0gV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpXShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29y
ZCwgY29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYgcmVjb3JkSW5mbykgeworICAgIG1fc3RvcmFn
ZS0+dHJhdmVyc2UocmVzb3VyY2VUeXBlKCksIDAsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHRyYXZlcnNlSGFuZGxlciA9IFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKV0o
Y29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8m
IHJlY29yZEluZm8pIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIC0tbV90
cmF2ZXJzZUNvdW50OwogICAgICAgICAgICAgdHJhdmVyc2VIYW5kbGVyKG51bGxwdHIpOwpAQCAt
NTUyLDggKzU2MCw2IEBAIFN0cmluZyBDYWNoZTo6ZHVtcEZpbGVQYXRoKCkgY29uc3QKIAogdm9p
ZCBDYWNoZTo6ZHVtcENvbnRlbnRzVG9GaWxlKCkKIHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIGF1dG8gZmQgPSBXZWJDb3JlOjpvcGVuRmlsZShkdW1wRmlsZVBh
dGgoKSwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKICAgICBpZiAoIVdlYkNvcmU6OmlzSGFuZGxl
VmFsaWQoZmQpKQogICAgICAgICByZXR1cm47CkBAIC02MjAsMTAgKzYyNiw2IEBAIHZvaWQgQ2Fj
aGU6OmNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2wKICAgICBpZiAobV9zdGF0aXN0aWNzKQog
ICAgICAgICBtX3N0YXRpc3RpY3MtPmNsZWFyKCk7CiAKLSAgICBpZiAoIW1fc3RvcmFnZSkgewot
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIFN0cmluZyBhbnlUeXBlOwogICAgIG1f
c3RvcmFnZS0+Y2xlYXIoYW55VHlwZSwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCkBAIC02MzcsMTMgKzYzOSwxMSBAQCB2b2lkIENhY2hlOjpjbGVhcigpCiAK
IFN0cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0b3Jh
Z2UgPyBtX3N0b3JhZ2UtPnJlY29yZHNQYXRoKCkgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9z
dG9yYWdlLT5yZWNvcmRzUGF0aCgpOwogfQogCiB2b2lkIENhY2hlOjpyZXRyaWV2ZURhdGEoY29u
c3QgRGF0YUtleSYgZGF0YUtleSwgRnVuY3Rpb248dm9pZCAoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVk
KCkpOwotCiAgICAgS2V5IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07CiAgICAg
bV9zdG9yYWdlLT5yZXRyaWV2ZShrZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byByZWNvcmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQg
fHwgIXJlY29yZC0+Ym9keS5zaXplKCkpIHsKQEAgLTY1Nyw4ICs2NTcsNiBAQCB2b2lkIENhY2hl
OjpyZXRyaWV2ZURhdGEoY29uc3QgRGF0YUtleSYgCiAKIHZvaWQgQ2FjaGU6OnN0b3JlRGF0YShj
b25zdCBEYXRhS2V5JiBkYXRhS2V5LCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAgICAgICAgcmV0dXJuOwogICAgIEtleSBrZXkgeyBk
YXRhS2V5LCBtX3N0b3JhZ2UtPnNhbHQoKSB9OwogICAgIFN0b3JhZ2U6OlJlY29yZCByZWNvcmQg
eyBrZXksIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpLCB7IH0sIERhdGEgeyBkYXRh
LCBzaXplIH0sIHsgfSB9OwogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCB7IH0pOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2Fj
aGVfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKIApAQCAtNTAsNyArNDksNyBAQCBjbGFzcyBDYWNoZTsKIGNsYXNzIFNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI7CiBjbGFzcyBTdGF0aXN0aWNzOwogCi1DYWNoZSYgc2luZ2xl
dG9uKCk7CitDYWNoZSogc2hhcmVkKCk7CiAKIHN0cnVjdCBNYXBwZWRCb2R5IHsKICNpZiBFTkFC
TEUoU0hBUkVBQkxFX1JFU09VUkNFKQpAQCAtOTEsMjIgKzkwLDIwIEBAIGVudW0gY2xhc3MgVXNl
RGVjaXNpb24gewogCiB1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpwYWlyPHVpbnQ2NF90IC8q
d2ViUGFnZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKIAotY2xhc3MgQ2FjaGUgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlKTsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpO
ZXZlckRlc3Ryb3llZDxDYWNoZT47CitjbGFzcyBDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPENh
Y2hlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBPcHRpb24gewotICAgICAgICBFZmZpY2Fj
eUxvZ2dpbmcgPSAxIDw8IDAsCisgICAgICAgIFNoYXJlZEluc3RhbmNlID0gMSA8PCAwLAorICAg
ICAgICBFZmZpY2FjeUxvZ2dpbmcgPSAxIDw8IDEsCiAgICAgICAgIC8vIEluIHRlc3RpbmcgbW9k
ZSB3ZSB0cnkgdG8gZWxpbWluYXRlIHNvdXJjZXMgb2YgcmFuZG9tbmVzcy4gQ2FjaGUgZG9lcyBu
b3Qgc2hyaW5rIGFuZCB0aGVyZSBhcmUgbm8gcmVhZCB0aW1lb3V0cy4KLSAgICAgICAgVGVzdGlu
Z01vZGUgPSAxIDw8IDEsCisgICAgICAgIFRlc3RpbmdNb2RlID0gMSA8PCAyLAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICAgICAgU3BlY3Vs
YXRpdmVSZXZhbGlkYXRpb24gPSAxIDw8IDIsCisgICAgICAgIFNwZWN1bGF0aXZlUmV2YWxpZGF0
aW9uID0gMSA8PCAzLAogI2VuZGlmCiAgICAgfTsKLSAgICBib29sIGluaXRpYWxpemUoY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgsIE9wdGlvblNldDxPcHRpb24+KTsKLSAgICB2b2lkIHNldENhcGFj
aXR5KHNpemVfdCk7CisgICAgc3RhdGljIFJlZlB0cjxDYWNoZT4gb3Blbihjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4pOwogCi0gICAgYm9vbCBpc0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiAhIW1fc3RvcmFnZTsgfQorICAgIHZvaWQgc2V0Q2FwYWNpdHkoc2l6ZV90
KTsKIAogICAgIC8vIENvbXBsZXRpb24gaGFuZGxlciBtYXkgZ2V0IGNhbGxlZCBiYWNrIHN5bmNo
cm9ub3VzbHkgb24gZmFpbHVyZS4KICAgICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBGdW5jdGlvbjx2b2lkIChzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+KT4mJik7CkBAIC0xMzUsMjIgKzEzMiwyMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wQ29udGVudHNUb0ZpbGUoKTsKIAogICAgIFN0cmluZyByZWNvcmRzUGF0aCgp
IGNvbnN0OwotICAgIGJvb2wgY2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKSBjb25zdCB7
IHJldHVybiBtX3N0b3JhZ2UgJiYgbV9zdG9yYWdlLT5jYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5
RGF0YSgpOyB9CisgICAgYm9vbCBjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZS0+Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKTsgfQog
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAg
IFNwZWN1bGF0aXZlTG9hZE1hbmFnZXIqIHNwZWN1bGF0aXZlTG9hZE1hbmFnZXIoKSB7IHJldHVy
biBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIuZ2V0KCk7IH0KICNlbmRpZgogCisgICAgfkNhY2hl
KCk7CisKIHByaXZhdGU6Ci0gICAgQ2FjaGUoKSA9IGRlZmF1bHQ7Ci0gICAgfkNhY2hlKCkgPSBk
ZWxldGU7CisgICAgQ2FjaGUoUmVmPFN0b3JhZ2U+JiYsIE9wdGlvblNldDxPcHRpb24+IG9wdGlv
bnMpOwogCiAgICAgS2V5IG1ha2VDYWNoZUtleShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKIAogICAgIFN0cmluZyBkdW1wRmlsZVBhdGgoKSBjb25zdDsKICAgICB2b2lkIGRlbGV0
ZUR1bXBGaWxlKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gbV9zdG9yYWdlOwor
ICAgIFJlZjxTdG9yYWdlPiBtX3N0b3JhZ2U7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BF
Q1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpMb3dQ
b3dlck1vZGVOb3RpZmllcj4gbV9sb3dQb3dlck1vZGVOb3RpZmllcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOwpA
QCAtMTYzLDQgKzE2MSwzIEBAIHByaXZhdGU6CiB9CiB9CiAjZW5kaWYKLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNyArMTQ2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3Rvcgog
I2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiB2b2lkIEVudHJ5Ojppbml0aWFsaXplU2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNhblVzZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRh
KCkpCisgICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpIHx8ICFOZXR3b3JrQ2FjaGU6OnNo
YXJlZCgpLT5jYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRy
eUNyZWF0ZVNoYXJlZE1lbW9yeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMCArNzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OndpbGxTZW5kUmVkaXJlY3Rl
ZAogewogICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICJTcGVjdWxh
dGl2ZSByZWRpcmVjdCAlcyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgcmVkaXJlY3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgbV9jYWNoZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkbid0IHVzZSB0aGUgc2hhcmVkIGluc3RhbmNlLgorICAgIG1fY2FjaGVF
bnRyeSA9IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVk
aXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICAvLyBDcmVhdGUgYSBzeW50aGV0
aWMgY2FjaGUgZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAgaWYgKCFtX2NhY2hlRW50cnkp
Ci0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkubWFrZVJl
ZGlyZWN0RW50cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsK
KyAgICAgICAgbV9jYWNoZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKS0+bWFrZVJlZGly
ZWN0RW50cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKIAog
ICAgIC8vIERvbid0IGZvbGxvdyB0aGUgcmVkaXJlY3QuIFRoZSByZWRpcmVjdCB0YXJnZXQgd2ls
bCBiZSByZWdpc3RlcmVkIGZvciBzcGVjdWxhdGl2ZSBsb2FkIHdoZW4gaXQgaXMgbG9hZGVkLgog
ICAgIGRpZENvbXBsZXRlKCk7CkBAIC04OSw3ICs5MCw3IEBAIGF1dG8gU3BlY3VsYXRpdmVMb2Fk
OjpkaWRSZWNlaXZlUmVzcG9uc2UKIAogICAgIGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1f
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKICAg
ICBpZiAodmFsaWRhdGlvblN1Y2NlZWRlZCAmJiBtX2NhY2hlRW50cnkpCi0gICAgICAgIG1fY2Fj
aGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG1fb3JpZ2luYWxSZXF1
ZXN0LCBtX2ZyYW1lSUQsICptX2NhY2hlRW50cnksIG1fcmVzcG9uc2UpOworICAgICAgICBtX2Nh
Y2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT51cGRhdGUobV9vcmlnaW5hbFJlcXVl
c3QsIG1fZnJhbWVJRCwgKm1fY2FjaGVFbnRyeSwgbV9yZXNwb25zZSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2NhY2hlRW50cnkgPSBudWxscHRyOwogCkBAIC0xMTUsMTAgKzExNiwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyhjCiAgICAgaWYgKG1fZGlkQ29tcGxl
dGUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fY2FjaGVFbnRyeSAmJiBtX2J1ZmZlcmVk
RGF0YUZvckNhY2hlKSB7Ci0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuc3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWRE
YXRhRm9yQ2FjaGUuY29weVJlZigpLCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOworICAgICAg
ICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT5zdG9yZShtX29yaWdpbmFs
UmVxdWVzdCwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFGb3JDYWNoZS5jb3B5UmVmKCksIFtd
KGF1dG8mIG1hcHBlZEJvZHkpIHsgfSk7CiAgICAgICAgIC8vIENyZWF0ZSBhIHN5bnRoZXRpYyBj
YWNoZSBlbnRyeSBpZiB3ZSBjYW4ndCBzdG9yZS4KICAgICAgICAgaWYgKCFtX2NhY2hlRW50cnkg
JiYgaXNTdGF0dXNDb2RlQ2FjaGVhYmxlQnlEZWZhdWx0KG1fcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSkpCi0gICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLm1ha2VFbnRyeShtX29yaWdpbmFsUmVxdWVzdCwgbV9yZXNwb25zZSwgV1RGTW92ZShtX2J1
ZmZlcmVkRGF0YUZvckNhY2hlKSk7CisgICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpLT5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2Us
IFdURk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOwogICAgIH0KIAogICAgIGRpZENvbXBs
ZXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIyMDE5OCkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTdGF0aXN0aWNz
Ojppbml0aWFsaXplKGNvbnN0IFN0cmluZwogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENv
cHkoKSwgbmV0d29ya0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0
ZWRDb3B5KCksIHN0YXJ0VGltZV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlz
cGF0Y2goW3RoaXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENvcHkoKSwg
bmV0d29ya0NhY2hlUGF0aCA9IHNoYXJlZCgpLT5yZWNvcmRzUGF0aCgpLCBzdGFydFRpbWVdIHsK
ICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVj
dG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkpCkBAIC0xNzgsNyAr
MTc4LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAKICAgICBjbGVhcigp
OwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbmV0d29y
a0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0ZWRDb3B5KCldIHsK
KyAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBuZXR3b3JrQ2Fj
aGVQYXRoID0gc2hhcmVkKCktPnJlY29yZHNQYXRoKCldIHsKICAgICAgICAgYm9vdHN0cmFwRnJv
bU5ldHdvcmtDYWNoZShuZXR3b3JrQ2FjaGVQYXRoKTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNoZSBzaHJpbmsgY29tcGxldGVkIG1f
YXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQpKTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2
aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTQgKzUzLDE3IEBAIHN0
YXRpYyBkb3VibGUgY29tcHV0ZVJlY29yZFdvcnRoKEZpbGVUaW0KIHN0cnVjdCBTdG9yYWdlOjpS
ZWFkT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBSZWFkT3BlcmF0aW9uKGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVy
JiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIDoga2V5KGtleSkKKyAgICBSZWFkT3BlcmF0
aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25I
YW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIDogc3RvcmFnZShzdG9yYWdlKQor
ICAgICAgICAsIGtleShrZXkpCiAgICAgICAgICwgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpCiAgICAgeyB9CiAKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIGJv
b2wgZmluaXNoKCk7CiAKKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IEtl
eSBrZXk7CiAgICAgY29uc3QgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFu
ZGxlcjsKICAgICAKQEAgLTk5LDExICsxMDIsMTMgQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0
aW9uOjpmaW5pc2goKQogc3RydWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBS
ZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKLSAg
ICAgICAgOiByZWNvcmQocmVjb3JkKQorICAgIFdyaXRlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3Jh
Z2UsIGNvbnN0IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlI
YW5kbGVyKQorICAgICAgICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCByZWNvcmQocmVj
b3JkKQogICAgICAgICAsIG1hcHBlZEJvZHlIYW5kbGVyKFdURk1vdmUobWFwcGVkQm9keUhhbmRs
ZXIpKQogICAgIHsgfQotICAgIAorICAgIFJlZjxTdG9yYWdlPiBzdG9yYWdlOworCiAgICAgY29u
c3QgUmVjb3JkIHJlY29yZDsKICAgICBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciBtYXBwZWRCb2R5
SGFuZGxlcjsKIApAQCAtMTEzLDExICsxMTgsMTMgQEAgcHVibGljOgogc3RydWN0IFN0b3JhZ2U6
OlRyYXZlcnNlT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBUcmF2ZXJzZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxh
Z3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIGhhbmRsZXIpCi0gICAgICAgIDogdHlwZSh0eXBl
KQorICAgIFRyYXZlcnNlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IFN0cmluZyYg
dHlwZSwgVHJhdmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgaGFuZGxlcikKKyAg
ICAgICAgOiBzdG9yYWdlKHN0b3JhZ2UpCisgICAgICAgICwgdHlwZSh0eXBlKQogICAgICAgICAs
IGZsYWdzKGZsYWdzKQogICAgICAgICAsIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKICAgICB7
IH0KKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKIAogICAgIGNvbnN0IFN0cmluZyB0eXBlOwog
ICAgIGNvbnN0IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CkBAIC0xNDksNyArMTU2LDcgQEAgc3RhdGlj
IFN0cmluZyBtYWtlU2FsdEZpbGVQYXRoKGNvbnN0IFN0cgogICAgIHJldHVybiBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQobWFrZVZlcnNpb25lZERpcmVjdG9yeVBhdGgoYmFzZURp
cmVjdG9yeVBhdGgpLCBzYWx0RmlsZU5hbWUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U3RvcmFn
ZT4gU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgTW9kZSBtb2RlKQorUmVm
UHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTgsNyArMTY1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oYwogICAgIGF1dG8g
c2FsdCA9IHJlYWRPck1ha2VTYWx0KG1ha2VTYWx0RmlsZVBhdGgoY2FjaGVQYXRoKSk7CiAgICAg
aWYgKCFzYWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U+KG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2UoY2FjaGVQYXRoLCBtb2RlLCAqc2FsdCkpOwog
fQogCiB2b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRUeXBlLCBjb25zdCBSZWNvcmRGaWxlVHJhdmVyc2VGdW5j
dGlvbiYgZnVuY3Rpb24pCkBAIC0yMjYsNiArMjMzLDEyIEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29u
c3QgU3RyaW5nJiBiYXNlRGlyZWMKIAogU3RvcmFnZTo6flN0b3JhZ2UoKQogeworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMu
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQobV9hY3RpdmVUcmF2ZXJzZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoIW1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyk7CisgICAgQVNTRVJUKCFtX3No
cmlua0luUHJvZ3Jlc3MpOwogfQogCiBTdHJpbmcgU3RvcmFnZTo6YmFzZVBhdGgoKSBjb25zdApA
QCAtMjU4LDcgKzI3MSw3IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgTE9H
KE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHN5bmNocm9uaXppbmcgY2Fj
aGUiKTsKIAotICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBi
YWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIGF1dG8gYmxvYkZpbHRlciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCByZWNv
cmRzU2l6ZSA9IDA7CkBAIC0zMDksNiArMzIyLDggQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6
ZSgpCiAgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKCkp
OwogCiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBj
YWNoZSBzeW5jaHJvbml6YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSV1IiwgcmVjb3Jk
c1NpemUsIGNvdW50KTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC01NTQsOCArNTY5LDkgQEAgdm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiAK
ICAgICByZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhrZXkpOwogCi0gICAgc2VyaWFs
QmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5XSB7CisgICAgc2VyaWFsQmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBrZXldICgpIG11dGFibGUgewogICAgICAgICBkZWxldGVGaWxlcyhrZXkpOworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01NzMsMTIgKzU4OSwxNCBAQCB2
b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25zdCBWZWN0b3I8S2V5PiYgCiAgICAgICAgIGtleXNUb1Jl
bW92ZS51bmNoZWNrZWRBcHBlbmQoa2V5KTsKICAgICB9CiAKLSAgICBzZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBrZXlzVG9SZW1vdmUgPSBXVEZNb3ZlKGtleXNUb1Jl
bW92ZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgeworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShr
ZXlzVG9SZW1vdmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUp
CiAgICAgICAgICAgICBkZWxldGVGaWxlcyhrZXkpOwogCi0gICAgICAgIGlmIChjb21wbGV0aW9u
SGFuZGxlcikKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGlmIChjb21wbGV0aW9u
SGFuZGxlcikKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9
KTsKICAgICB9KTsKIH0KIApAQCAtODA1LDcgKzgyMyw3IEBAIHZvaWQgU3RvcmFnZTo6cmV0cmll
dmUoY29uc3QgS2V5JiBrZXksIHUKICAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZl
V3JpdGVPcGVyYXRpb25zLCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0
aW9uPihrZXksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIHJlYWRPcGVy
YXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlzLCBrZXksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJp
b3JpdHlbcHJpb3JpdHldLnByZXBlbmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAgZGlz
cGF0Y2hQZW5kaW5nUmVhZE9wZXJhdGlvbnMoKTsKIH0KQEAgLTgxOCw3ICs4MzYsNyBAQCB2b2lk
IFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkCiAgICAgaWYgKCFtX2NhcGFjaXR5
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxXcml0ZU9wZXJhdGlvbj4ocmVjb3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVy
KSk7CisgICAgYXV0byB3cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVPcGVy
YXRpb24+KCp0aGlzLCByZWNvcmQsIFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKICAgICBt
X3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMucHJlcGVuZChXVEZNb3ZlKHdyaXRlT3BlcmF0aW9uKSk7
CiAKICAgICAvLyBBZGQga2V5IHRvIHRoZSBmaWx0ZXIgYWxyZWFkeSBoZXJlIGFzIHdlIGRvIGxv
b2t1cHMgZnJvbSB0aGUgcGVuZGluZyBvcGVyYXRpb25zIHRvby4KQEAgLTg0MCw3ICs4NTgsNyBA
QCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwCiAgICAgQVNTRVJUKHRy
YXZlcnNlSGFuZGxlcik7CiAgICAgLy8gQXZvaWQgbm9uLXRocmVhZCBzYWZlIEZ1bmN0aW9uIGNv
cGllcy4KIAotICAgIGF1dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRyYXZlcnNlT3BlcmF0aW9uPih0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIp
KTsKKyAgICBhdXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2
ZXJzZU9wZXJhdGlvbj4oKnRoaXMsIHR5cGUsIGZsYWdzLCBXVEZNb3ZlKHRyYXZlcnNlSGFuZGxl
cikpOwogICAgIGF1dG8mIHRyYXZlcnNlT3BlcmF0aW9uID0gKnRyYXZlcnNlT3BlcmF0aW9uUHRy
OwogICAgIG1fYWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmFkZChXVEZNb3ZlKHRyYXZlcnNlT3Bl
cmF0aW9uUHRyKSk7CiAKQEAgLTkzNiw3ICs5NTQsNyBAQCB2b2lkIFN0b3JhZ2U6OmNsZWFyKGNv
bnN0IFN0cmluZyYgdHlwZSwgCiAgICAgICAgIG1fYmxvYkZpbHRlci0+Y2xlYXIoKTsKICAgICBt
X2FwcHJveGltYXRlUmVjb3Jkc1NpemUgPSAwOwogCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0
aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewor
ICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewog
ICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKICAgICAgICAg
dHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIHR5cGUsIFttb2RpZmllZFNpbmNlVGlt
ZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wgaXNCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9y
eVBhdGgpIHsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocmVjb3JkRGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUpOwpAQCAtOTUzLDEx
ICs5NzEsMTAgQEAgdm9pZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIAogICAg
ICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0
b3JhZ2Uuc3luY2hyb25pemUoKTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsK
LSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBp
ZiAoY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0pOwogfQog
CkBAIC0xMDE5LDcgKzEwMzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBMT0co
TmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIGNhY2hlIGFw
cHJveGltYXRlU2l6ZT0lenUgY2FwYWNpdHk9JXp1IiwgYXBwcm94aW1hdGVTaXplKCksIG1fY2Fw
YWNpdHkpOwogCi0gICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAg
IGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlz
LT5yZWNvcmRzUGF0aCgpOwogICAgICAgICBTdHJpbmcgYW55VHlwZTsKICAgICAgICAgdHJhdmVy
c2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIGFueVR5cGUsIFt0aGlzXShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCBpc0Jsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgewpAQCAtMTA0
Myw3ICsxMDYwLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKIAotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKV0gewogICAgICAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0g
ZmFsc2U7CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBzeW5jaHJvbml6ZSBkdXJpbmcgdGhlIHNo
cmluayB0cmF2ZXJzYWwuIEhvd2V2ZXIgdGhpcyBpcyBmYXN0IGFuZCBpdCBpcyBiZXR0ZXIgdG8g
aGF2ZSBqdXN0IG9uZSBjb2RlIHBhdGguCiAgICAgICAgICAgICBzeW5jaHJvbml6ZSgpOwpAQCAt
MTA1NSw3ICsxMDcyLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiB2b2lkIFN0b3JhZ2U6
OmRlbGV0ZU9sZFZlcnNpb25zKCkKIHsKLSAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNo
KFt0aGlzXSB7CisgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBjYWNo
ZVBhdGggPSBiYXNlUGF0aCgpOwogICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgs
IFsmY2FjaGVQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlw
ZSB0eXBlKSB7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRp
cmVjdG9yeSkKQEAgLTEwNzksNiArMTA5Niw4IEBAIHZvaWQgU3RvcmFnZTo6ZGVsZXRlT2xkVmVy
c2lvbnMoKQogCiAgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShvbGRWZXJz
aW9uUGF0aCk7CiAgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsgfSk7CiAgICAgfSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgTmV0d29ya0NhY2hlU3RvcmFnZV9oCi0jZGVmaW5lIE5ldHdv
cmtDYWNoZVN0b3JhZ2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKIApAQCAtNDUsMTEgKzQ0LDEwIEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBjbGFz
cyBJT0NoYW5uZWw7CiAKLWNsYXNzIFN0b3JhZ2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN0b3JhZ2UpOworY2xhc3MgU3RvcmFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
dG9yYWdlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBUZXN0aW5n
IH07Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoLCBNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2U+IG9wZW4oY29u
c3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUpOwogCiAgICAgc3RydWN0IFJlY29yZCB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTkzLDQgKzE5MSwzIEBAIHZvaWQgdHJh
dmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiAKIH0KIH0KICNlbmRpZgotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJh
bWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtD
YWNoZSkgewotICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlv
bj4gY2FjaGVPcHRpb25zOworICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2Fj
aGU6Ok9wdGlvbj4gY2FjaGVPcHRpb25zIHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpT
aGFyZWRJbnN0YW5jZSB9OworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVy
cy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgICAgICAg
ICAgY2FjaGVPcHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6RWZmaWNhY3lM
b2dnaW5nOwogICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uKQpAQCAtMTE3LDcgKzExOCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbikKICAgICAgICAgICAgICAgICBjYWNo
ZU9wdGlvbnMgfD0gTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpTcGVjdWxhdGl2ZVJldmFs
aWRhdGlvbjsKICNlbmRpZgotICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRpb25zKSkgeworICAg
ICAgICAgICAgTmV0d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9yeSwg
Y2FjaGVPcHRpb25zKTsKKworICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIE5TVVJMQ2FjaGUuCiAgICAgICAgICAgICAg
ICAgYXV0byB1cmxDYWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1v
cnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAg
ICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg3LDEzICsxOTEsMTUgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOgogICAgICAgICBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdy
b3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKLSAgICBhdXRvIGdyb3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKLSAgICBkaXNw
YXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQ
dHI8dm9pZCgpPjo6ZnJvbUNhbGxhYmxlKFtncm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3Vw
LCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3Qg
bmVjZXNzYXJ5LgotICAgICAgICAgICAgY2xlYXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNp
bmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmdl
dCgpKTsKKyAgICBpZiAoTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgeworICAgICAgICBhdXRvIGdy
b3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKKyAgICAgICAgZGlzcGF0Y2hfZ3JvdXBf
YXN5bmMoZ3JvdXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIEJsb2NrUHRyPHZvaWQoKT46
OmZyb21DYWxsYWJsZShbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaGFyZWQoKS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmll
ZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUHJvYmFibHkgbm90IG5lY2Vz
c2FyeS4KKyAgICAgICAgICAgICAgICBjbGVhck5TVVJMQ2FjaGUoZ3JvdXAsIG1vZGlmaWVkU2lu
Y2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KS5nZXQoKSk7CisgICAgfQogI2Vsc2UKICAgICBjbGVhck5TVVJMQ2FjaGUobV9jbGVhckNh
Y2hlRGlzcGF0Y2hHcm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU1NCw3ICs1NTQsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29h
OjpOZXR3b3JrU2Vzc2lvbkNvY29hCiAgICAgaWYgKCFhbGxvd3NDZWxsdWxhckFjY2VzcykKICAg
ICAgICAgY29uZmlndXJhdGlvbi5hbGxvd3NDZWxsdWxhckFjY2VzcyA9IE5POwogICAgIAotICAg
IGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQorICAgIGlmIChOZXR3
b3JrQ2FjaGU6OnNoYXJlZCgpKQogICAgICAgICBjb25maWd1cmF0aW9uLlVSTENhY2hlID0gbmls
OwogICAgIAogICAgIGlmIChhdXRvJiBkYXRhID0gZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRp
dFRva2VuRGF0YSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317168</attachid>
            <date>2017-08-03 15:34:05 -0700</date>
            <delta_ts>2017-08-04 04:34:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-4.patch</filename>
            <type>text/plain</type>
            <size>47385</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyMzEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxNy0wOC0wMyAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBjYWNoZSBzaG91bGQg
YmUgdXNhYmxlIGFzIG5vbi1zaW5nbGV0b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTEzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGl0IGFzIGEgbm9uLXNpbmds
ZXRvbiBpbiB0aGUgZnV0dXJlIChmb3IgZXhhbXBsZSBhcyBhIGJhY2tlbmQgZm9yIHRoZSBjYWNo
ZSBBUEkpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgTmV0d29ya0NhY2hlOjpDYWNoZSBh
bmQgTmV0d29ya0NhY2hlOjpTdG9yYWdlIHJlZmNvdW50ZWQgb2JqZWN0cyBhbmQgdGFrZXMKKyAg
ICAgICAgY2FyZSB0byByZWYgdGhlbSBwcm9wZXJseSBkdXJpbmcgYXN5bmNocm9ub3VzIG9wZXJh
dGlvbnMuCisKKyAgICAgICAgVGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgY3JlYXRlIGFueSBu
b24tc2hhcmVkIGluc3RhbmNlcywgaXQganVzdCBhZGRzIHRoZSBjYXBhYmlsaXR5LgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJp
dmVkRGF0YVRvQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAg
KFdlYktpdDo6Y2xlYXJEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKworICAgICAgICAgICAgSW5jbHVkZSBzaGFy
ZWQgY2FjaGUgYXMgYSByZWZmZWQgbWVtYmVyIGZvciBub24tZXBoZW1lcmFsIGluc3RhbmNlcy4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVzZUNhY2hlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNh
Y2hlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnRyeVN0b3JlQXNDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6c2hh
cmVkSW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNoYXJlZCk6CisK
KyAgICAgICAgICAgIFJlcGxhY2Ugc2luZ2xldG9uIHdpdGggYSBnbG9iYWwgc2hhcmVkIGluc3Rh
bmNlIHRoYXQgY2FuIGJlIG51bGwgaWYgdGhlIGNhY2hlIGhhcyBub3QgYmVlbiBvcGVuZWQuCisK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6b3Blbik6CisKKyAgICAgICAg
ICAgIE9wZW4gbm93IHJldHVybnMgbnVsbCBpZiBpdCBmYWlscy4KKyAgICAgICAgICAgIFRoZSBu
ZXcgU2hhcmVkSW5zdGFuY2Ugb3B0aW9uIGNhbiBiZSBzZXQgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xv
YmFsIHNoYXJlZCBpbnN0YW5jZS4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNh
Y2hlOjpDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6On5DYWNo
ZSk6CisKKyAgICAgICAgICAgIEFkZCBkZXN0cnVjdG9yLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6ZHVtcEZpbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpDYWNoZTo6c2V0Q2FwYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFByb3RlY3QgdGhlIGNhY2hlIGluc3Rh
bmNlIGR1cmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Q2FjaGU6OnN0b3JlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjp0
cmF2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmR1bXBDb250
ZW50c1RvRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmNsZWFy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmVjb3Jkc1BhdGggY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZXRyaWV2ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmlzRW5hYmxlZCBj
b25zdCk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFJlbW92ZSBpc0VuYWJsZWQoKSBzdGF0ZSBh
cyBhIGNhY2hlIG9iamVjdCBub3cgYWx3YXlzIHJlcHJlc2VudHMgYW4gZW5hYmxlZCBjYWNoZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6aW5pdGlhbGl6ZVNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlRnJvbVN0b3JhZ2VSZWNvcmQgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjp3aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxv
YWQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3BlY3VsYXRpdmVMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6UmVhZE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6V3JpdGVPcGVyYXRpb246
OldyaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpUcmF2ZXJzZU9wZXJhdGlvbjo6VHJhdmVyc2VPcGVyYXRpb24pOgorCisgICAgICAgICAgICBP
cGVyYXRpb25zIG5vdyByZWYgdGhlIHN0b3JhZ2UuIFRoZXkgYXJlIGFscmVhZHkgZGVsZXRlZCBp
biB0aGUgbWFpbiB0aHJlYWQgc28KKyAgICAgICAgICAgIHByb3BlciBkZXN0cnVjdGlvbiBpcyB0
YWtlbiBjYXJlIG9mLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6
b3Blbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6flN0b3JhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnN5bmNocm9uaXplKToK
KworICAgICAgICAgICAgVGhpcyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIG1ldGhvZHMgbm93IHBy
b3RlY3QgdGhlIFN0b3JhZ2UgaW5zdGFuY2UuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0
b3JhZ2U6OnJldHJpZXZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6dHJhdmVy
c2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzaHJpbmspOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
Q29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29j
b2EpOgorCiAyMDE3LTA4LTAzICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMDIwOS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OndyaXQKIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RvcmVEZXJpdmVk
RGF0YVRvQ2FjaGUoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGFLZXkmIGRhdGFLZXks
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKIHsKLSAgICBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwor
ICAgIGlmICghTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRD
YXB0dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShy
ZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDkgKzMyOCw5IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnVwZGF0ZUNvb2tpZVBhcnRpdGkKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hl
RW50cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVu
dHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
Ci0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICBp
ZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpKSB7CiAgICAgICAgIEhhc2hN
YXA8U2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwotICAgICAg
ICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRTaXpl
cyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgeworICAgICAgICBjYWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RG
TW92ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAgVmVjdG9y
PFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKIApAQCAtNDM2LDIwICs0MzYsMjAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUwogc3RhdGljIHZvaWQgY2xlYXJE
aXNrQ2FjaGVFbnRyaWVzKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5z
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxl
ZCgpKSB7CisgICAgaWYgKGF1dG8qIGNhY2hlID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgewog
ICAgICAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnNUb0RlbGV0ZTsK
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQogICAgICAgICAgICAgb3JpZ2lu
c1RvRGVsZXRlLmFkZChvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICAgICAgVmVjdG9y
PE5ldHdvcmtDYWNoZTo6S2V5PiBjYWNoZUtleXNUb0RlbGV0ZTsKLSAgICAgICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRlID0gV1RGTW92ZShvcmlnaW5zVG9EZWxl
dGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUoY2FjaGVLZXlzVG9EZWxldGUpXShhdXRv
KiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CisgICAgICAgIGNhY2hlLT50cmF2ZXJzZShbY2Fj
aGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdp
bnNUb0RlbGV0ZSA9IFdURk1vdmUob3JpZ2luc1RvRGVsZXRlKSwgY2FjaGVLZXlzVG9EZWxldGUg
PSBXVEZNb3ZlKGNhY2hlS2V5c1RvRGVsZXRlKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFi
bGUgewogICAgICAgICAgICAgaWYgKHRyYXZlcnNhbEVudHJ5KSB7CiAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbnNUb0RlbGV0ZS5jb250YWlucyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRyYXZl
cnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgpKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNhY2hlS2V5c1RvRGVsZXRlLmFwcGVuZCh0cmF2ZXJzYWxFbnRyeS0+ZW50cnkua2V5KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoY2FjaGVLZXlzVG9EZWxldGUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoY2FjaGVLZXlz
VG9EZWxldGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSk7CiAKQEAgLTU3NSw5ICs1NzUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1vZGVsKHVpbnQzCiAgICAgICAgIHVybENhY2hlRGlza0NhcGFjaXR5ID0gbV9k
aXNrQ2FjaGVTaXplT3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBh
dXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGlmIChu
ZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgbmV0d29ya0NhY2hlLnNldENhcGFj
aXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpKSB7CisgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0eSh1cmxDYWNoZURp
c2tDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBA
QCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiAgICAgLCBtX2Nvbm5l
Y3Rpb24oY29ubmVjdGlvbikKICAgICAsIG1fZGVmZXJzTG9hZGluZyhwYXJhbWV0ZXJzLmRlZmVy
c0xvYWRpbmcpCiAgICAgLCBtX2J1ZmZlcmluZ1RpbWVyKCp0aGlzLCAmTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKQorICAgICwgbV9jYWNoZShzZXNzaW9uSUQoKS5p
c0VwaGVtZXJhbCgpID8gbnVsbHB0ciA6IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSBvZiB0aGUgZXhpc3RlbmNlIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgaW4g
V2ViQ29yZS4KQEAgLTEyMSwxMCArMTIyLDEwIEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5l
dHdvcmtSZXNvdXJjZUwKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIGJvb2wgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpjYW5Vc2VDYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
IGNvbnN0CiB7Ci0gICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCisgICAgaWYgKCFtX2NhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KCFzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKTsKKwogICAgIGlmICghcmVxdWVzdC51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
b3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpEb05vdFVzZUFueUNh
Y2hlKQpAQCAtMTgxLDcgKzE4Miw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRy
aWV2ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkucmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBt
X3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIp
LCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CisgICAgbV9jYWNoZS0+cmV0cmlldmUocmVxdWVzdCwg
eyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhp
cywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CiAgICAg
ICAgIGlmIChsb2FkZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVy
IGhhcyBiZWVuIGFib3J0ZWQgYW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4K
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNyw3ICszMDgsNyBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAgICBpZiAoY2FuVXNlQ2FjaGUobV9uZXR3b3JrTG9h
ZC0+Y3VycmVudFJlcXVlc3QoKSkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGFscmVhZHkg
aGF2ZSB1c2VkIGRhdGEgZnJvbSB0aGlzIGluY29tcGxldGUgbG9hZC4gRW5zdXJlIG9sZGVyIHZl
cnNpb25zIGRvbid0IHJlbWFpbiBpbiB0aGUgY2FjaGUgYWZ0ZXIgY2FuY2VsLgogICAgICAgICAg
ICAgaWYgKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkucmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOwor
ICAgICAgICAgICAgICAgIG1fY2FjaGUtPnJlbW92ZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVx
dWVzdCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNl
bCgpOwpAQCAtMzM0LDcgKzMzNSw3IEBAIGF1dG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmUKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBi
b29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0g
MzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVk
KSB7Ci0gICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndl
YlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlv
biA9IG1fY2FjaGUtPnVwZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiwgbV9yZXNwb25zZSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY29u
ZGl0aW9uYWwgdGhlbiB0aGlzIHJldmFsaWRhdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBieSB0aGUg
bmV0d29yayBjYWNoZSBhbmQgd2UgcGFzcyB0aGUgMzA0IHJlc3BvbnNlIHRvIFdlYkNvcmUuCiAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCkuaXNDb25kaXRpb25hbCgpKQogICAgICAg
ICAgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwpAQCAtNDcwLDcg
KzQ3MSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGkKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmIChjYW5Vc2VDYWNoZWRSZWRpcmVjdChyZXF1
ZXN0KSkKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0KHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgICAgIG1fY2Fj
aGUtPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1
ZXN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwogI2VuZGlmCkBAIC01NTks
NyArNTYwLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeVN0b3JlQXNDYQogICAg
IGlmICghbV9idWZmZXJlZERhdGFGb3JDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVz
dCgpLCBtX3Jlc3BvbnNlLCBXVEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVy
ID0gbWFrZVJlZigqdGhpcyldKGF1dG8mIG1hcHBlZEJvZHkpIG11dGFibGUgeworICAgIG1fY2Fj
aGUtPnN0b3JlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdU
Rk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0o
YXV0byYgbWFwcGVkQm9keSkgbXV0YWJsZSB7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJD
RSkKICAgICAgICAgaWYgKG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC01ODgsNyArNTg5LDcgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogCiAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6
IG1fcGFyYW1ldGVycy5kZXJpdmVkQ2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZSkgewogICAgICAg
ICAgICAgTmV0d29ya0NhY2hlOjpEYXRhS2V5IGtleSB7IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hl
UGFydGl0aW9uKCksIHR5cGUsIGJvZHlIYXNoIH07Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpLnJldHJpZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKSwg
ZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBtX2NhY2hlLT5yZXRyaWV2ZURhdGEoa2V5
LCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyksIGVudHJ5UHRyLCB0eXBlLCByZXRyaWV2ZUNvdW50
XSAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50Kys7CiAgICAgICAgICAg
ICAgICAgYm9vbCByZXRyaWV2ZWRBbGwgPSBsb2FkZXItPm1fcmV0cmlldmVkRGVyaXZlZERhdGFD
b3VudCA9PSByZXRyaWV2ZUNvdW50OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRyeShyZXRyaWV2ZWRBbGwgPyBlbnRyeVB0ciA6IG51bGxw
dHIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsNiArMTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlRpbWVyIG1fYnVmZmVyaW5n
VGltZXI7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgUmVmUHRyPE5ldHdvcmtDYWNo
ZTo6Q2FjaGU+IG1fY2FjaGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9i
dWZmZXJlZERhdGFGb3JDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpF
bnRyeT4gbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbjsKICAgICBib29sIG1faXNXYWl0aW5nQ29u
dGludWVXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZWRSZWRpcmVjdCB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwzNCBAQCBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvdXJjZVR5cGUoCiAgICAgcmV0dXJuIHJlc291
cmNlOwogfQogCi1DYWNoZSYgc2luZ2xldG9uKCkKK3N0YXRpYyBSZWZQdHI8Q2FjaGU+JiBzaGFy
ZWRJbnN0YW5jZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5j
ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPENhY2hlPj4gaW5zdGFuY2U7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQogCitDYWNoZSogc2hhcmVkKCkKK3sKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2UoKS5nZXQoKTsKK30KKworUmVmUHRyPENhY2hlPiBDYWNoZTo6b3Blbihj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucykKK3sKKyAg
ICBhdXRvIHN0b3JhZ2UgPSBTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCwgb3B0aW9ucy5jb250YWlu
cyhPcHRpb246OlRlc3RpbmdNb2RlKSA/IFN0b3JhZ2U6Ok1vZGU6OlRlc3RpbmcgOiBTdG9yYWdl
OjpNb2RlOjpOb3JtYWwpOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgb3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIXN0b3JhZ2UpOworCisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY2FjaGUg
PSBhZG9wdFJlZigqbmV3IENhY2hlKHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKSwgb3B0aW9ucykp
OworCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpTaGFyZWRJbnN0YW5jZSkpCisg
ICAgICAgIHNoYXJlZEluc3RhbmNlKCkgPSBjYWNoZS5wdHIoKTsKKworICAgIHJldHVybiBXVEZN
b3ZlKGNhY2hlKTsKK30KKwogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIGR1bXBGaWxl
Q2hhbmdlZChDYWNoZSogY2FjaGUpCiB7CkBAIC03NSwxMCArOTcsOSBAQCBzdGF0aWMgdm9pZCBk
dW1wRmlsZUNoYW5nZWQoQ2FjaGUqIGNhY2hlCiB9CiAjZW5kaWYKIAotYm9vbCBDYWNoZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9u
cykKK0NhY2hlOjpDYWNoZShSZWY8U3RvcmFnZT4mJiBzdG9yYWdlLCBPcHRpb25TZXQ8T3B0aW9u
PiBvcHRpb25zKQorICAgIDogbV9zdG9yYWdlKFdURk1vdmUoc3RvcmFnZSkpCiB7Ci0gICAgbV9z
dG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9u
OjpUZXN0aW5nTW9kZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6
Tm9ybWFsKTsKLQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURB
VElPTikKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxp
ZGF0aW9uKSkgewogICAgICAgICBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb3JlOjpMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dl
ck1vZGVFbmFibGVkKSB7CkBAIC04Nyw0NCArMTA4LDQxIEBAIGJvb2wgQ2FjaGU6OmluaXRpYWxp
emUoY29uc3QgU3RyaW5nJiBjYWMKICAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1h
bmFnZXIgPSBudWxscHRyOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIpOwotICAgICAgICAgICAgICAgIG1fc3BlY3Vs
YXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdl
cj4oKm1fc3RvcmFnZSk7CisgICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
ID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPihtX3N0b3JhZ2UuZ2V0
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgaWYgKCFtX2xvd1Bvd2Vy
TW9kZU5vdGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1fc3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFu
YWdlcj4oKm1fc3RvcmFnZSk7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KG1fc3RvcmFnZS5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OkVm
ZmljYWN5TG9nZ2luZykpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4o
Y2FjaGVQYXRoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6b3BlbihtX3N0
b3JhZ2UtPmJhc2VQYXRoKCkpOwogCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpT
aGFyZWRJbnN0YW5jZSkpIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAvLyBUcmlnZ2VycyB3
aXRoICJub3RpZnl1dGlsIC1wIGNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuZHVtcCIuCi0gICAgaWYg
KG1fc3RvcmFnZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJub3RpZnl1dGlsIC1wIGNv
bS5hcHBsZS5XZWJLaXQuQ2FjaGUuZHVtcCIuCiAgICAgICAgIGludCB0b2tlbjsKICAgICAgICAg
bm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLCAm
dG9rZW4sIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oaW50KSB7CiAgICAgICAgICAgICBk
dW1wQ29udGVudHNUb0ZpbGUoKTsKICAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmCiAjaWYgUExB
VEZPUk0oR1RLKQotICAgIC8vIFRyaWdnZXJzIHdpdGggInRvdWNoICRjYWNoZVBhdGgvZHVtcCIu
Ci0gICAgaWYgKG1fc3RvcmFnZSkgeworICAgICAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAk
Y2FjaGVQYXRoL2R1bXAiLgogICAgICAgICBDU3RyaW5nIGR1bXBGaWxlUGF0aCA9IFdlYkNvcmU6
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9zdG9yYWdlLT5iYXNlUGF0aCgpLCAiZHVtcCIpKTsKICAgICAgICAgR1JlZlB0cjxHRmls
ZT4gZHVtcEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkdW1wRmlsZVBhdGgu
ZGF0YSgpKSk7CiAgICAgICAgIEdGaWxlTW9uaXRvciogbW9uaXRvciA9IGdfZmlsZV9tb25pdG9y
X2ZpbGUoZHVtcEZpbGUuZ2V0KCksIEdfRklMRV9NT05JVE9SX05PTkUsIG51bGxwdHIsIG51bGxw
dHIpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobW9uaXRvciwgImNoYW5nZWQi
LCBHX0NBTExCQUNLKGR1bXBGaWxlQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KICNlbmRpZgorICAg
IH0KK30KIAotICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBj
YWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwotICAgIHJldHVybiAhIW1f
c3RvcmFnZTsKK0NhY2hlOjp+Q2FjaGUoKQorewogfQogCiB2b2lkIENhY2hlOjpzZXRDYXBhY2l0
eShzaXplX3QgbWF4aW11bVNpemUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2UpCi0gICAgICAgIHJl
dHVybjsKICAgICBtX3N0b3JhZ2UtPnNldENhcGFjaXR5KG1heGltdW1TaXplKTsKIH0KIApAQCAt
MzE1LDcgKzMzMyw2IEBAIHN0YXRpYyBTdG9yZURlY2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMK
IAogdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQo
aXNFbmFibGVkKCkpOwogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSk7CiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRy
aWV2aW5nICVzIHByaW9yaXR5ICVkIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpKTsKQEAgLTM1NSw3ICsz
NzIsNyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgYXV0
byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICBhdXRv
IHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CiAK
LSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcmVx
dWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3Rh
cnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFn
ZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNv
cmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CiAKQEAgLTQwOCw3
ICs0MjUsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjptYWtlUmVkaXJlCiAKIHN0
ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBGdW5jdGlv
bjx2b2lkIChNYXBwZWRCb2R5Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
KGlzRW5hYmxlZCgpKTsKICAgICBBU1NFUlQocmVzcG9uc2VEYXRhKTsKIAogICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0b3JpbmcgJXMsIHBhcnRpdGlvbiAlcyIsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBtYWtlQ2FjaGVLZXkocmVxdWVz
dCkucGFydGl0aW9uKCkubGF0aW4xKCkuZGF0YSgpKTsKQEAgLTQzMyw3ICs0NDksNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zCiAgICAgYXV0byBjYWNoZUVudHJ5
ID0gbWFrZUVudHJ5KHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlRGF0YSkpOwog
ICAgIGF1dG8gcmVjb3JkID0gY2FjaGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAK
LSAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IERhdGEmIGJvZHlEYXRhKSB7CisgICAg
bV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGNv
bnN0IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKICNp
ZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAoY2FuVXNlU2hhcmVkTWVt
b3J5Rm9yQm9keURhdGEoKSkgewpAQCAtNDUzLDggKzQ2OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxF
bnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnMKIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6
c3RvcmVSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCkKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVk
KCkpOwotCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RvcmluZyBy
ZWRpcmVjdCAlcyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgp
LCByZWRpcmVjdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogICAg
IFN0b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbiA9IG1ha2VTdG9yZURlY2lzaW9uKHJlcXVlc3Qs
IHJlc3BvbnNlLCAwKTsKQEAgLTQ5NSw4ICs1MDksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IENhY2hlOjp1cGRhdGUoY29uCiAKIHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkK
IHsKLSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5
KTsKIH0KIApAQCAtNTA3LDE1ICs1MTksMTEgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IFdl
YkNvcmU6OlJlc291cgogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgVmVjdG9yPEtleT4mIGtl
eXMsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
KGlzRW5hYmxlZCgpKTsKLQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBDYWNoZTo6dHJhdmVyc2UoRnVuY3Rpb248dm9p
ZCAoY29uc3QgVHJhdmVyc2FsRW50cnkqKT4mJiB0cmF2ZXJzZUhhbmRsZXIpCiB7Ci0gICAgQVNT
RVJUKGlzRW5hYmxlZCgpKTsKLQogICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjbGllbnRzIG1ha2lu
ZyBleGNlc3NpdmUgdHJhdmVyc2FsIHJlcXVlc3RzLgogICAgIGNvbnN0IHVuc2lnbmVkIG1heGlt
dW1UcmF2ZXJzZUNvdW50ID0gMzsKICAgICBpZiAobV90cmF2ZXJzZUNvdW50ID49IG1heGltdW1U
cmF2ZXJzZUNvdW50KSB7CkBAIC01MjksNyArNTM3LDcgQEAgdm9pZCBDYWNoZTo6dHJhdmVyc2Uo
RnVuY3Rpb248dm9pZCAoY29ucwogCiAgICAgKyttX3RyYXZlcnNlQ291bnQ7CiAKLSAgICBtX3N0
b3JhZ2UtPnRyYXZlcnNlKHJlc291cmNlVHlwZSgpLCAwLCBbdGhpcywgdHJhdmVyc2VIYW5kbGVy
ID0gV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpXShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29y
ZCwgY29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYgcmVjb3JkSW5mbykgeworICAgIG1fc3RvcmFn
ZS0+dHJhdmVyc2UocmVzb3VyY2VUeXBlKCksIDAsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHRyYXZlcnNlSGFuZGxlciA9IFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKV0o
Y29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8m
IHJlY29yZEluZm8pIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIC0tbV90
cmF2ZXJzZUNvdW50OwogICAgICAgICAgICAgdHJhdmVyc2VIYW5kbGVyKG51bGxwdHIpOwpAQCAt
NTUyLDggKzU2MCw2IEBAIFN0cmluZyBDYWNoZTo6ZHVtcEZpbGVQYXRoKCkgY29uc3QKIAogdm9p
ZCBDYWNoZTo6ZHVtcENvbnRlbnRzVG9GaWxlKCkKIHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIGF1dG8gZmQgPSBXZWJDb3JlOjpvcGVuRmlsZShkdW1wRmlsZVBh
dGgoKSwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKICAgICBpZiAoIVdlYkNvcmU6OmlzSGFuZGxl
VmFsaWQoZmQpKQogICAgICAgICByZXR1cm47CkBAIC02MjAsMTAgKzYyNiw2IEBAIHZvaWQgQ2Fj
aGU6OmNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2wKICAgICBpZiAobV9zdGF0aXN0aWNzKQog
ICAgICAgICBtX3N0YXRpc3RpY3MtPmNsZWFyKCk7CiAKLSAgICBpZiAoIW1fc3RvcmFnZSkgewot
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIFN0cmluZyBhbnlUeXBlOwogICAgIG1f
c3RvcmFnZS0+Y2xlYXIoYW55VHlwZSwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCkBAIC02MzcsMTMgKzYzOSwxMSBAQCB2b2lkIENhY2hlOjpjbGVhcigpCiAK
IFN0cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0b3Jh
Z2UgPyBtX3N0b3JhZ2UtPnJlY29yZHNQYXRoKCkgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9z
dG9yYWdlLT5yZWNvcmRzUGF0aCgpOwogfQogCiB2b2lkIENhY2hlOjpyZXRyaWV2ZURhdGEoY29u
c3QgRGF0YUtleSYgZGF0YUtleSwgRnVuY3Rpb248dm9pZCAoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlQoaXNFbmFibGVk
KCkpOwotCiAgICAgS2V5IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07CiAgICAg
bV9zdG9yYWdlLT5yZXRyaWV2ZShrZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byByZWNvcmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQg
fHwgIXJlY29yZC0+Ym9keS5zaXplKCkpIHsKQEAgLTY1Nyw4ICs2NTcsNiBAQCB2b2lkIENhY2hl
OjpyZXRyaWV2ZURhdGEoY29uc3QgRGF0YUtleSYgCiAKIHZvaWQgQ2FjaGU6OnN0b3JlRGF0YShj
b25zdCBEYXRhS2V5JiBkYXRhS2V5LCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAgICAgICAgcmV0dXJuOwogICAgIEtleSBrZXkgeyBk
YXRhS2V5LCBtX3N0b3JhZ2UtPnNhbHQoKSB9OwogICAgIFN0b3JhZ2U6OlJlY29yZCByZWNvcmQg
eyBrZXksIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpLCB7IH0sIERhdGEgeyBkYXRh
LCBzaXplIH0sIHsgfSB9OwogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCB7IH0pOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2Fj
aGVfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKIApAQCAtNTAsNyArNDksNyBAQCBjbGFzcyBDYWNoZTsKIGNsYXNzIFNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI7CiBjbGFzcyBTdGF0aXN0aWNzOwogCi1DYWNoZSYgc2luZ2xl
dG9uKCk7CitDYWNoZSogc2hhcmVkKCk7CiAKIHN0cnVjdCBNYXBwZWRCb2R5IHsKICNpZiBFTkFC
TEUoU0hBUkVBQkxFX1JFU09VUkNFKQpAQCAtOTEsMjIgKzkwLDIwIEBAIGVudW0gY2xhc3MgVXNl
RGVjaXNpb24gewogCiB1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpwYWlyPHVpbnQ2NF90IC8q
d2ViUGFnZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKIAotY2xhc3MgQ2FjaGUgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlKTsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpO
ZXZlckRlc3Ryb3llZDxDYWNoZT47CitjbGFzcyBDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPENh
Y2hlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBPcHRpb24gewotICAgICAgICBFZmZpY2Fj
eUxvZ2dpbmcgPSAxIDw8IDAsCisgICAgICAgIFNoYXJlZEluc3RhbmNlID0gMSA8PCAwLAorICAg
ICAgICBFZmZpY2FjeUxvZ2dpbmcgPSAxIDw8IDEsCiAgICAgICAgIC8vIEluIHRlc3RpbmcgbW9k
ZSB3ZSB0cnkgdG8gZWxpbWluYXRlIHNvdXJjZXMgb2YgcmFuZG9tbmVzcy4gQ2FjaGUgZG9lcyBu
b3Qgc2hyaW5rIGFuZCB0aGVyZSBhcmUgbm8gcmVhZCB0aW1lb3V0cy4KLSAgICAgICAgVGVzdGlu
Z01vZGUgPSAxIDw8IDEsCisgICAgICAgIFRlc3RpbmdNb2RlID0gMSA8PCAyLAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICAgICAgU3BlY3Vs
YXRpdmVSZXZhbGlkYXRpb24gPSAxIDw8IDIsCisgICAgICAgIFNwZWN1bGF0aXZlUmV2YWxpZGF0
aW9uID0gMSA8PCAzLAogI2VuZGlmCiAgICAgfTsKLSAgICBib29sIGluaXRpYWxpemUoY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgsIE9wdGlvblNldDxPcHRpb24+KTsKLSAgICB2b2lkIHNldENhcGFj
aXR5KHNpemVfdCk7CisgICAgc3RhdGljIFJlZlB0cjxDYWNoZT4gb3Blbihjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4pOwogCi0gICAgYm9vbCBpc0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiAhIW1fc3RvcmFnZTsgfQorICAgIHZvaWQgc2V0Q2FwYWNpdHkoc2l6ZV90
KTsKIAogICAgIC8vIENvbXBsZXRpb24gaGFuZGxlciBtYXkgZ2V0IGNhbGxlZCBiYWNrIHN5bmNo
cm9ub3VzbHkgb24gZmFpbHVyZS4KICAgICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBGdW5jdGlvbjx2b2lkIChzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+KT4mJik7CkBAIC0xMzUsMjIgKzEzMiwyMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wQ29udGVudHNUb0ZpbGUoKTsKIAogICAgIFN0cmluZyByZWNvcmRzUGF0aCgp
IGNvbnN0OwotICAgIGJvb2wgY2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKSBjb25zdCB7
IHJldHVybiBtX3N0b3JhZ2UgJiYgbV9zdG9yYWdlLT5jYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5
RGF0YSgpOyB9CisgICAgYm9vbCBjYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZS0+Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKTsgfQog
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAg
IFNwZWN1bGF0aXZlTG9hZE1hbmFnZXIqIHNwZWN1bGF0aXZlTG9hZE1hbmFnZXIoKSB7IHJldHVy
biBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIuZ2V0KCk7IH0KICNlbmRpZgogCisgICAgfkNhY2hl
KCk7CisKIHByaXZhdGU6Ci0gICAgQ2FjaGUoKSA9IGRlZmF1bHQ7Ci0gICAgfkNhY2hlKCkgPSBk
ZWxldGU7CisgICAgQ2FjaGUoUmVmPFN0b3JhZ2U+JiYsIE9wdGlvblNldDxPcHRpb24+IG9wdGlv
bnMpOwogCiAgICAgS2V5IG1ha2VDYWNoZUtleShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKIAogICAgIFN0cmluZyBkdW1wRmlsZVBhdGgoKSBjb25zdDsKICAgICB2b2lkIGRlbGV0
ZUR1bXBGaWxlKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gbV9zdG9yYWdlOwor
ICAgIFJlZjxTdG9yYWdlPiBtX3N0b3JhZ2U7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BF
Q1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpMb3dQ
b3dlck1vZGVOb3RpZmllcj4gbV9sb3dQb3dlck1vZGVOb3RpZmllcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOwpA
QCAtMTYzLDQgKzE2MSwzIEBAIHByaXZhdGU6CiB9CiB9CiAjZW5kaWYKLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNyArMTQ2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3Rvcgog
I2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiB2b2lkIEVudHJ5Ojppbml0aWFsaXplU2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNhblVzZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRh
KCkpCisgICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpIHx8ICFOZXR3b3JrQ2FjaGU6OnNo
YXJlZCgpLT5jYW5Vc2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRy
eUNyZWF0ZVNoYXJlZE1lbW9yeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMCArNzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OndpbGxTZW5kUmVkaXJlY3Rl
ZAogewogICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICJTcGVjdWxh
dGl2ZSByZWRpcmVjdCAlcyAtPiAlcyIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgcmVkaXJlY3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgbV9jYWNoZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkbid0IHVzZSB0aGUgc2hhcmVkIGluc3RhbmNlLgorICAgIG1fY2FjaGVF
bnRyeSA9IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCktPnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVk
aXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICAvLyBDcmVhdGUgYSBzeW50aGV0
aWMgY2FjaGUgZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAgaWYgKCFtX2NhY2hlRW50cnkp
Ci0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkubWFrZVJl
ZGlyZWN0RW50cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsK
KyAgICAgICAgbV9jYWNoZUVudHJ5ID0gTmV0d29ya0NhY2hlOjpzaGFyZWQoKS0+bWFrZVJlZGly
ZWN0RW50cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKIAog
ICAgIC8vIERvbid0IGZvbGxvdyB0aGUgcmVkaXJlY3QuIFRoZSByZWRpcmVjdCB0YXJnZXQgd2ls
bCBiZSByZWdpc3RlcmVkIGZvciBzcGVjdWxhdGl2ZSBsb2FkIHdoZW4gaXQgaXMgbG9hZGVkLgog
ICAgIGRpZENvbXBsZXRlKCk7CkBAIC04OSw3ICs5MCw3IEBAIGF1dG8gU3BlY3VsYXRpdmVMb2Fk
OjpkaWRSZWNlaXZlUmVzcG9uc2UKIAogICAgIGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1f
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKICAg
ICBpZiAodmFsaWRhdGlvblN1Y2NlZWRlZCAmJiBtX2NhY2hlRW50cnkpCi0gICAgICAgIG1fY2Fj
aGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG1fb3JpZ2luYWxSZXF1
ZXN0LCBtX2ZyYW1lSUQsICptX2NhY2hlRW50cnksIG1fcmVzcG9uc2UpOworICAgICAgICBtX2Nh
Y2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT51cGRhdGUobV9vcmlnaW5hbFJlcXVl
c3QsIG1fZnJhbWVJRCwgKm1fY2FjaGVFbnRyeSwgbV9yZXNwb25zZSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2NhY2hlRW50cnkgPSBudWxscHRyOwogCkBAIC0xMTUsMTAgKzExNiwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyhjCiAgICAgaWYgKG1fZGlkQ29tcGxl
dGUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fY2FjaGVFbnRyeSAmJiBtX2J1ZmZlcmVk
RGF0YUZvckNhY2hlKSB7Ci0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuc3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWRE
YXRhRm9yQ2FjaGUuY29weVJlZigpLCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOworICAgICAg
ICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT5zdG9yZShtX29yaWdpbmFs
UmVxdWVzdCwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFGb3JDYWNoZS5jb3B5UmVmKCksIFtd
KGF1dG8mIG1hcHBlZEJvZHkpIHsgfSk7CiAgICAgICAgIC8vIENyZWF0ZSBhIHN5bnRoZXRpYyBj
YWNoZSBlbnRyeSBpZiB3ZSBjYW4ndCBzdG9yZS4KICAgICAgICAgaWYgKCFtX2NhY2hlRW50cnkg
JiYgaXNTdGF0dXNDb2RlQ2FjaGVhYmxlQnlEZWZhdWx0KG1fcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSkpCi0gICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLm1ha2VFbnRyeShtX29yaWdpbmFsUmVxdWVzdCwgbV9yZXNwb25zZSwgV1RGTW92ZShtX2J1
ZmZlcmVkRGF0YUZvckNhY2hlKSk7CisgICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpLT5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2Us
IFdURk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOwogICAgIH0KIAogICAgIGRpZENvbXBs
ZXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIyMDE5OCkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTdGF0aXN0aWNz
Ojppbml0aWFsaXplKGNvbnN0IFN0cmluZwogCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENv
cHkoKSwgbmV0d29ya0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0
ZWRDb3B5KCksIHN0YXJ0VGltZV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlz
cGF0Y2goW3RoaXMsIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aC5pc29sYXRlZENvcHkoKSwg
bmV0d29ya0NhY2hlUGF0aCA9IHNoYXJlZCgpLT5yZWNvcmRzUGF0aCgpLCBzdGFydFRpbWVdIHsK
ICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVj
dG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkpCkBAIC0xNzgsNyAr
MTc4LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAKICAgICBjbGVhcigp
OwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbmV0d29y
a0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0ZWRDb3B5KCldIHsK
KyAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBuZXR3b3JrQ2Fj
aGVQYXRoID0gc2hhcmVkKCktPnJlY29yZHNQYXRoKCldIHsKICAgICAgICAgYm9vdHN0cmFwRnJv
bU5ldHdvcmtDYWNoZShuZXR3b3JrQ2FjaGVQYXRoKTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNoZSBzaHJpbmsgY29tcGxldGVkIG1f
YXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQpKTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2
aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTQgKzUzLDE3IEBAIHN0
YXRpYyBkb3VibGUgY29tcHV0ZVJlY29yZFdvcnRoKEZpbGVUaW0KIHN0cnVjdCBTdG9yYWdlOjpS
ZWFkT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBSZWFkT3BlcmF0aW9uKGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVy
JiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIDoga2V5KGtleSkKKyAgICBSZWFkT3BlcmF0
aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25I
YW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIDogc3RvcmFnZShzdG9yYWdlKQor
ICAgICAgICAsIGtleShrZXkpCiAgICAgICAgICwgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpCiAgICAgeyB9CiAKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIGJv
b2wgZmluaXNoKCk7CiAKKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IEtl
eSBrZXk7CiAgICAgY29uc3QgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFu
ZGxlcjsKICAgICAKQEAgLTk5LDExICsxMDIsMTMgQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0
aW9uOjpmaW5pc2goKQogc3RydWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBS
ZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKLSAg
ICAgICAgOiByZWNvcmQocmVjb3JkKQorICAgIFdyaXRlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3Jh
Z2UsIGNvbnN0IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlI
YW5kbGVyKQorICAgICAgICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCByZWNvcmQocmVj
b3JkKQogICAgICAgICAsIG1hcHBlZEJvZHlIYW5kbGVyKFdURk1vdmUobWFwcGVkQm9keUhhbmRs
ZXIpKQogICAgIHsgfQotICAgIAorICAgIFJlZjxTdG9yYWdlPiBzdG9yYWdlOworCiAgICAgY29u
c3QgUmVjb3JkIHJlY29yZDsKICAgICBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciBtYXBwZWRCb2R5
SGFuZGxlcjsKIApAQCAtMTEzLDExICsxMTgsMTMgQEAgcHVibGljOgogc3RydWN0IFN0b3JhZ2U6
OlRyYXZlcnNlT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBUcmF2ZXJzZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxh
Z3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIGhhbmRsZXIpCi0gICAgICAgIDogdHlwZSh0eXBl
KQorICAgIFRyYXZlcnNlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IFN0cmluZyYg
dHlwZSwgVHJhdmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgaGFuZGxlcikKKyAg
ICAgICAgOiBzdG9yYWdlKHN0b3JhZ2UpCisgICAgICAgICwgdHlwZSh0eXBlKQogICAgICAgICAs
IGZsYWdzKGZsYWdzKQogICAgICAgICAsIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKICAgICB7
IH0KKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKIAogICAgIGNvbnN0IFN0cmluZyB0eXBlOwog
ICAgIGNvbnN0IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CkBAIC0xNDksNyArMTU2LDcgQEAgc3RhdGlj
IFN0cmluZyBtYWtlU2FsdEZpbGVQYXRoKGNvbnN0IFN0cgogICAgIHJldHVybiBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQobWFrZVZlcnNpb25lZERpcmVjdG9yeVBhdGgoYmFzZURp
cmVjdG9yeVBhdGgpLCBzYWx0RmlsZU5hbWUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U3RvcmFn
ZT4gU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgTW9kZSBtb2RlKQorUmVm
UHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTgsNyArMTY1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oYwogICAgIGF1dG8g
c2FsdCA9IHJlYWRPck1ha2VTYWx0KG1ha2VTYWx0RmlsZVBhdGgoY2FjaGVQYXRoKSk7CiAgICAg
aWYgKCFzYWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U+KG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2UoY2FjaGVQYXRoLCBtb2RlLCAqc2FsdCkpOwog
fQogCiB2b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRUeXBlLCBjb25zdCBSZWNvcmRGaWxlVHJhdmVyc2VGdW5j
dGlvbiYgZnVuY3Rpb24pCkBAIC0yMjYsNiArMjMzLDEyIEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29u
c3QgU3RyaW5nJiBiYXNlRGlyZWMKIAogU3RvcmFnZTo6flN0b3JhZ2UoKQogeworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMu
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQobV9hY3RpdmVUcmF2ZXJzZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoIW1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyk7CisgICAgQVNTRVJUKCFtX3No
cmlua0luUHJvZ3Jlc3MpOwogfQogCiBTdHJpbmcgU3RvcmFnZTo6YmFzZVBhdGgoKSBjb25zdApA
QCAtMjU4LDcgKzI3MSw3IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgTE9H
KE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHN5bmNocm9uaXppbmcgY2Fj
aGUiKTsKIAotICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBi
YWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIGF1dG8gYmxvYkZpbHRlciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCByZWNv
cmRzU2l6ZSA9IDA7CkBAIC0zMDksNiArMzIyLDggQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6
ZSgpCiAgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKCkp
OwogCiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBj
YWNoZSBzeW5jaHJvbml6YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSV1IiwgcmVjb3Jk
c1NpemUsIGNvdW50KTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC01NTQsOCArNTY5LDkgQEAgdm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiAK
ICAgICByZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhrZXkpOwogCi0gICAgc2VyaWFs
QmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5XSB7CisgICAgc2VyaWFsQmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBrZXldICgpIG11dGFibGUgewogICAgICAgICBkZWxldGVGaWxlcyhrZXkpOworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01NzMsMTIgKzU4OSwxNCBAQCB2
b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25zdCBWZWN0b3I8S2V5PiYgCiAgICAgICAgIGtleXNUb1Jl
bW92ZS51bmNoZWNrZWRBcHBlbmQoa2V5KTsKICAgICB9CiAKLSAgICBzZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBrZXlzVG9SZW1vdmUgPSBXVEZNb3ZlKGtleXNUb1Jl
bW92ZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgeworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShr
ZXlzVG9SZW1vdmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUp
CiAgICAgICAgICAgICBkZWxldGVGaWxlcyhrZXkpOwogCi0gICAgICAgIGlmIChjb21wbGV0aW9u
SGFuZGxlcikKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGlmIChjb21wbGV0aW9u
SGFuZGxlcikKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9
KTsKICAgICB9KTsKIH0KIApAQCAtODA1LDcgKzgyMyw3IEBAIHZvaWQgU3RvcmFnZTo6cmV0cmll
dmUoY29uc3QgS2V5JiBrZXksIHUKICAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZl
V3JpdGVPcGVyYXRpb25zLCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0
aW9uPihrZXksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIHJlYWRPcGVy
YXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlzLCBrZXksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJp
b3JpdHlbcHJpb3JpdHldLnByZXBlbmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAgZGlz
cGF0Y2hQZW5kaW5nUmVhZE9wZXJhdGlvbnMoKTsKIH0KQEAgLTgxOCw3ICs4MzYsNyBAQCB2b2lk
IFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkCiAgICAgaWYgKCFtX2NhcGFjaXR5
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxXcml0ZU9wZXJhdGlvbj4ocmVjb3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVy
KSk7CisgICAgYXV0byB3cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVPcGVy
YXRpb24+KCp0aGlzLCByZWNvcmQsIFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKICAgICBt
X3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMucHJlcGVuZChXVEZNb3ZlKHdyaXRlT3BlcmF0aW9uKSk7
CiAKICAgICAvLyBBZGQga2V5IHRvIHRoZSBmaWx0ZXIgYWxyZWFkeSBoZXJlIGFzIHdlIGRvIGxv
b2t1cHMgZnJvbSB0aGUgcGVuZGluZyBvcGVyYXRpb25zIHRvby4KQEAgLTg0MCw3ICs4NTgsNyBA
QCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwCiAgICAgQVNTRVJUKHRy
YXZlcnNlSGFuZGxlcik7CiAgICAgLy8gQXZvaWQgbm9uLXRocmVhZCBzYWZlIEZ1bmN0aW9uIGNv
cGllcy4KIAotICAgIGF1dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRyYXZlcnNlT3BlcmF0aW9uPih0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIp
KTsKKyAgICBhdXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2
ZXJzZU9wZXJhdGlvbj4oKnRoaXMsIHR5cGUsIGZsYWdzLCBXVEZNb3ZlKHRyYXZlcnNlSGFuZGxl
cikpOwogICAgIGF1dG8mIHRyYXZlcnNlT3BlcmF0aW9uID0gKnRyYXZlcnNlT3BlcmF0aW9uUHRy
OwogICAgIG1fYWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmFkZChXVEZNb3ZlKHRyYXZlcnNlT3Bl
cmF0aW9uUHRyKSk7CiAKQEAgLTkzNiw3ICs5NTQsNyBAQCB2b2lkIFN0b3JhZ2U6OmNsZWFyKGNv
bnN0IFN0cmluZyYgdHlwZSwgCiAgICAgICAgIG1fYmxvYkZpbHRlci0+Y2xlYXIoKTsKICAgICBt
X2FwcHJveGltYXRlUmVjb3Jkc1NpemUgPSAwOwogCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0
aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewor
ICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewog
ICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKICAgICAgICAg
dHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIHR5cGUsIFttb2RpZmllZFNpbmNlVGlt
ZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wgaXNCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9y
eVBhdGgpIHsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocmVjb3JkRGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUpOwpAQCAtOTUzLDEx
ICs5NzEsMTAgQEAgdm9pZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIAogICAg
ICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0
b3JhZ2Uuc3luY2hyb25pemUoKTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsK
LSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBp
ZiAoY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0pOwogfQog
CkBAIC0xMDE5LDcgKzEwMzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBMT0co
TmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIGNhY2hlIGFw
cHJveGltYXRlU2l6ZT0lenUgY2FwYWNpdHk9JXp1IiwgYXBwcm94aW1hdGVTaXplKCksIG1fY2Fw
YWNpdHkpOwogCi0gICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAg
IGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlz
LT5yZWNvcmRzUGF0aCgpOwogICAgICAgICBTdHJpbmcgYW55VHlwZTsKICAgICAgICAgdHJhdmVy
c2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIGFueVR5cGUsIFt0aGlzXShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCBpc0Jsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgewpAQCAtMTA0
Myw3ICsxMDYwLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKIAotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKV0gewogICAgICAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0g
ZmFsc2U7CiAgICAgICAgICAgICAvLyBXZSBjb3VsZCBzeW5jaHJvbml6ZSBkdXJpbmcgdGhlIHNo
cmluayB0cmF2ZXJzYWwuIEhvd2V2ZXIgdGhpcyBpcyBmYXN0IGFuZCBpdCBpcyBiZXR0ZXIgdG8g
aGF2ZSBqdXN0IG9uZSBjb2RlIHBhdGguCiAgICAgICAgICAgICBzeW5jaHJvbml6ZSgpOwpAQCAt
MTA1NSw3ICsxMDcyLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiB2b2lkIFN0b3JhZ2U6
OmRlbGV0ZU9sZFZlcnNpb25zKCkKIHsKLSAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNo
KFt0aGlzXSB7CisgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBjYWNo
ZVBhdGggPSBiYXNlUGF0aCgpOwogICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgs
IFsmY2FjaGVQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlw
ZSB0eXBlKSB7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRp
cmVjdG9yeSkKQEAgLTEwNzksNiArMTA5Niw4IEBAIHZvaWQgU3RvcmFnZTo6ZGVsZXRlT2xkVmVy
c2lvbnMoKQogCiAgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShvbGRWZXJz
aW9uUGF0aCk7CiAgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsgfSk7CiAgICAgfSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgTmV0d29ya0NhY2hlU3RvcmFnZV9oCi0jZGVmaW5lIE5ldHdv
cmtDYWNoZVN0b3JhZ2VfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKIApAQCAtNDUsMTEgKzQ0LDEwIEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBjbGFz
cyBJT0NoYW5uZWw7CiAKLWNsYXNzIFN0b3JhZ2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN0b3JhZ2UpOworY2xhc3MgU3RvcmFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
dG9yYWdlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBUZXN0aW5n
IH07Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoLCBNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2U+IG9wZW4oY29u
c3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUpOwogCiAgICAgc3RydWN0IFJlY29yZCB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTkzLDQgKzE5MSwzIEBAIHZvaWQgdHJh
dmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiAKIH0KIH0KICNlbmRpZgotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJh
bWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtD
YWNoZSkgewotICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlv
bj4gY2FjaGVPcHRpb25zOworICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2Fj
aGU6Ok9wdGlvbj4gY2FjaGVPcHRpb25zIHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpT
aGFyZWRJbnN0YW5jZSB9OworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVy
cy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgICAgICAg
ICAgY2FjaGVPcHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6RWZmaWNhY3lM
b2dnaW5nOwogICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uKQpAQCAtMTE3LDcgKzExOCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbikKICAgICAgICAgICAgICAgICBjYWNo
ZU9wdGlvbnMgfD0gTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpTcGVjdWxhdGl2ZVJldmFs
aWRhdGlvbjsKICNlbmRpZgotICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRpb25zKSkgeworICAg
ICAgICAgICAgTmV0d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9yeSwg
Y2FjaGVPcHRpb25zKTsKKworICAgICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIE5TVVJMQ2FjaGUuCiAgICAgICAgICAgICAg
ICAgYXV0byB1cmxDYWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1v
cnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAg
ICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg3LDEzICsxOTEsMTUgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOgogICAgICAgICBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdy
b3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKLSAgICBhdXRvIGdyb3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKLSAgICBkaXNw
YXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQ
dHI8dm9pZCgpPjo6ZnJvbUNhbGxhYmxlKFtncm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3Vw
LCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3Qg
bmVjZXNzYXJ5LgotICAgICAgICAgICAgY2xlYXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNp
bmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmdl
dCgpKTsKKyAgICBpZiAoTmV0d29ya0NhY2hlOjpzaGFyZWQoKSkgeworICAgICAgICBhdXRvIGdy
b3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKKyAgICAgICAgZGlzcGF0Y2hfZ3JvdXBf
YXN5bmMoZ3JvdXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIEJsb2NrUHRyPHZvaWQoKT46
OmZyb21DYWxsYWJsZShbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaGFyZWQoKS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmll
ZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUHJvYmFibHkgbm90IG5lY2Vz
c2FyeS4KKyAgICAgICAgICAgICAgICBjbGVhck5TVVJMQ2FjaGUoZ3JvdXAsIG1vZGlmaWVkU2lu
Y2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KS5nZXQoKSk7CisgICAgfQogI2Vsc2UKICAgICBjbGVhck5TVVJMQ2FjaGUobV9jbGVhckNh
Y2hlRGlzcGF0Y2hHcm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyMjAxOTgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU1NCw3ICs1NTQsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29h
OjpOZXR3b3JrU2Vzc2lvbkNvY29hCiAgICAgaWYgKCFhbGxvd3NDZWxsdWxhckFjY2VzcykKICAg
ICAgICAgY29uZmlndXJhdGlvbi5hbGxvd3NDZWxsdWxhckFjY2VzcyA9IE5POwogICAgIAotICAg
IGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQorICAgIGlmIChOZXR3
b3JrQ2FjaGU6OnNoYXJlZCgpKQogICAgICAgICBjb25maWd1cmF0aW9uLlVSTENhY2hlID0gbmls
OwogICAgIAogICAgIGlmIChhdXRvJiBkYXRhID0gZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRp
dFRva2VuRGF0YSgpKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpjbGVhck9sZFNv
dXBDYWNoZShXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKG1fZGlza0NhY2hlRGlyZWN0b3J5KSk7CiAK
LSAgICBPcHRpb25TZXQ8TmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uPiBjYWNoZU9wdGlvbnM7
CisgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbj4gY2FjaGVPcHRpb25z
IHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpTaGFyZWRJbnN0YW5jZSB9OworCiAgICAg
aWYgKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nKQog
ICAgICAgICBjYWNoZU9wdGlvbnMgfD0gTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpFZmZp
Y2FjeUxvZ2dpbmc7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJ
REFUSU9OKQpAQCAtMTIwLDcgKzEyMSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU4KICAgICAgICAgY2FjaGVPcHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6
Ok9wdGlvbjo6U3BlY3VsYXRpdmVSZXZhbGlkYXRpb247CiAjZW5kaWYKIAotICAgIE5ldHdvcmtD
YWNoZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVP
cHRpb25zKTsKKyAgICBOZXR3b3JrQ2FjaGU6OkNhY2hlOjpvcGVuKG1fZGlza0NhY2hlRGlyZWN0
b3J5LCBjYWNoZU9wdGlvbnMpOwogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyPigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlUGF0aCwKQEAgLTE1OCw3ICsxNTksOSBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyRGlz
a0NhY2hlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5j
ZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLmNsZWFyKG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2hhcmVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLT5jbGVhcihtb2RpZmllZFNpbmNlLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtVGVybWluYXRlKCkK
</data>
<flag name="review"
          id="337765"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317233</attachid>
            <date>2017-08-04 04:34:13 -0700</date>
            <delta_ts>2017-08-04 05:21:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-5.patch</filename>
            <type>text/plain</type>
            <size>58793</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyNjIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMDE3LTA4LTA0ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGNhY2hlIHNob3VsZCBi
ZSB1c2FibGUgYXMgbm9uLXNpbmdsZXRvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KKworICAgICAgICBXZSBtaWdodCB3YW50IHRvIHVzZSBpdCBhcyBhIG5vbi1zaW5nbGV0b24g
aW4gdGhlIGZ1dHVyZSAoZm9yIGV4YW1wbGUgYXMgYSBiYWNrZW5kIGZvciB0aGUgY2FjaGUgQVBJ
KS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIE5ldHdvcmtDYWNoZTo6Q2FjaGUgYW5kIE5l
dHdvcmtDYWNoZTo6U3RvcmFnZSByZWZjb3VudGVkIG9iamVjdHMgYW5kIHRha2VzCisgICAgICAg
IGNhcmUgdG8gcmVmIHRoZW0gcHJvcGVybHkgZHVyaW5nIGFzeW5jaHJvbm91cyBvcGVyYXRpb25z
LgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IGFjdHVhbGx5IGNyZWF0ZSBhbnkgbm9uLXNo
YXJlZCBpbnN0YW5jZXMsIGl0IGp1c3QgYWRkcyB0aGUgY2FwYWJpbGl0eS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0b3JlRGVyaXZlZERh
dGFUb0NhY2hlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJL
aXQ6OmNsZWFyRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2FjaGUpOgorCisgICAg
ICAgICAgICBNb3ZlIHRoZSBzaGFyZWQgY2FjaGUgaW5zdGFuY2UgdG8gdGhlIG5ldHdvcmsgcHJv
Y2VzcyBzaW5nbGV0b24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcik6CisKKyAgICAgICAgICAgIEluY2x1ZGUgc2hhcmVkIGNhY2hl
IGFzIGEgcmVmZmVkIG1lbWJlciBmb3Igbm9uLWVwaGVtZXJhbCBpbnN0YW5jZXMuCisKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5Vc2VDYWNoZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDYWNoZUVudHJ5
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlT
dG9yZUFzQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkUmV0cmlldmVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpvcGVu
KToKKworICAgICAgICAgICAgT3BlbiBub3cgcmV0dXJucyBudWxsIGlmIGl0IGZhaWxzLgorICAg
ICAgICAgICAgQWRkIFJlZ2lzdGVyTm90aWZ5IG9wdGlvbiB0byBzZXQgdXAgbm90aWZ5IHRyaWdn
ZXIgZm9yIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpDYWNoZTo6Q2FjaGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
Ojp+Q2FjaGUpOgorCisgICAgICAgICAgICBBZGQgZGVzdHJ1Y3Rvci4KKworICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmR1bXBGaWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6Q2FjaGU6OnNldENhcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6cmV0cmlldmUpOgorCisgICAgICAgICAgICBQcm90ZWN0IHRoZSBjYWNo
ZSBpbnN0YW5jZSBkdXJpbmcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZVJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
YWNoZTo6dHJhdmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpk
dW1wQ29udGVudHNUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnJlY29yZHNQ
YXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmV0cmll
dmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6c3RvcmVEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpzaW5nbGV0b24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjppbml0aWFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9k
eURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjppc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorCisgICAgICAgICAgICBSZW1vdmUgaXNFbmFibGVkKCkg
c3RhdGUgYXMgYSBjYWNoZSBvYmplY3Qgbm93IGFsd2F5cyByZXByZXNlbnRzIGFuIGVuYWJsZWQg
Y2FjaGUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxpemVT
aGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6d2lsbFNlbmRS
ZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3Vs
YXRpdmVMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OlJlYWRPcGVy
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OldyaXRlT3Bl
cmF0aW9uOjpXcml0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3RvcmFnZTo6VHJhdmVyc2VPcGVyYXRpb246OlRyYXZlcnNlT3BlcmF0aW9uKToKKworICAgICAg
ICAgICAgT3BlcmF0aW9ucyBub3cgcmVmIHRoZSBzdG9yYWdlLiBUaGV5IGFyZSBhbHJlYWR5IGRl
bGV0ZWQgaW4gdGhlIG1haW4gdGhyZWFkIHNvCisgICAgICAgICAgICBwcm9wZXIgZGVzdHJ1Y3Rp
b24gaXMgdGFrZW4gY2FyZSBvZi4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0
b3JhZ2U6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6On5T
dG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzeW5jaHJv
bml6ZSk6CisKKyAgICAgICAgICAgIFRoaXMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBtZXRob2Rz
IG5vdyBwcm90ZWN0IHRoZSBTdG9yYWdlIGluc3RhbmNlLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6
OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpjbGVh
cik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6c2hyaW5rKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9ucyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyRGlz
a0NhY2hlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vz
c2lvbkNvY29hKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpj
bGVhckRpc2tDYWNoZSk6CisKIDIwMTctMDgtMDQgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mg
dXNlcyB0aGUgd3JvbmcgZml4ZWQgcG9zaXRpb24gcmVjdGFuZ2xlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwOSw3ICs0MDksOCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Ojp3cml0CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0b3JlRGVyaXZl
ZERhdGFUb0NhY2hlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhS2V5JiBkYXRhS2V5
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCiB7Ci0gICAgTmV0d29ya0NhY2hlOjpz
aW5nbGV0b24oKS5zdG9yZURhdGEoZGF0YUtleSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
KyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUo
KSkKKyAgICAgICAgY2FjaGUtPnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDYXB0
dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZp
c2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDkgKzMyOCw5IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnVwZGF0ZUNvb2tpZVBhcnRpdGkKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50
cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlv
bj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5
Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0g
ICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICBpZiAo
YXV0byogY2FjaGUgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkgewogICAg
ICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Q+IG9yaWdpbnNBbmRTaXpl
czsKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbZmV0Y2hPcHRp
b25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmln
aW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8qIHRyYXZlcnNhbEVu
dHJ5KSBtdXRhYmxlIHsKKyAgICAgICAgY2FjaGUtPnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRT
aXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11
dGFibGUgewogICAgICAgICAgICAgaWYgKCF0cmF2ZXJzYWxFbnRyeSkgewogICAgICAgICAgICAg
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7CiAKQEAgLTQzNiwyMCArNDM2
LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFMKIHN0YXRpYyB2
b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRh
PiYgb3JpZ2lucywgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5pc0VuYWJsZWQoKSkgeworICAgIGlmIChhdXRvKiBjYWNoZSA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5jYWNoZSgpKSB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPj4gb3JpZ2luc1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdp
bnMpCiAgICAgICAgICAgICBvcmlnaW5zVG9EZWxldGUuYWRkKG9yaWdpbi5zZWN1cml0eU9yaWdp
bigpKTsKIAogICAgICAgICBWZWN0b3I8TmV0d29ya0NhY2hlOjpLZXk+IGNhY2hlS2V5c1RvRGVs
ZXRlOwotICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnRyYXZlcnNlKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zVG9EZWxldGUg
PSBXVEZNb3ZlKG9yaWdpbnNUb0RlbGV0ZSksIGNhY2hlS2V5c1RvRGVsZXRlID0gV1RGTW92ZShj
YWNoZUtleXNUb0RlbGV0ZSldKGF1dG8qIHRyYXZlcnNhbEVudHJ5KSBtdXRhYmxlIHsKKyAgICAg
ICAgY2FjaGUtPnRyYXZlcnNlKFtjYWNoZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRlID0gV1RGTW92ZShvcmlnaW5zVG9EZWxl
dGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUoY2FjaGVLZXlzVG9EZWxldGUpXShhdXRv
KiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAodHJhdmVyc2FsRW50
cnkpIHsKICAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLmNvbnRhaW5zKFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUodHJhdmVyc2FsRW50cnktPmVudHJ5LnJlc3BvbnNlKCkudXJsKCkp
KSkKICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlzVG9EZWxldGUuYXBwZW5kKHRyYXZlcnNh
bEVudHJ5LT5lbnRyeS5rZXkoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShjYWNo
ZUtleXNUb0RlbGV0ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAg
Y2FjaGUtPnJlbW92ZShjYWNoZUtleXNUb0RlbGV0ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9KTsKIApAQCAtNTc1LDkgKzU3NSw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwodWludDMKICAgICAgICAgdXJs
Q2FjaGVEaXNrQ2FwYWNpdHkgPSBtX2Rpc2tDYWNoZVNpemVPdmVycmlkZTsKIAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQotICAgIGF1dG8mIG5ldHdvcmtDYWNoZSA9IE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKG5ldHdvcmtDYWNoZS5pc0VuYWJsZWQoKSkgewotICAgICAg
ICBuZXR3b3JrQ2FjaGUuc2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworICAgIGlm
IChtX2NhY2hlKSB7CisgICAgICAgIG1fY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hlRGlza0Nh
cGFjaXR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjIwMTk4
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMCBAQCBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZTsK
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczsKIAorbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CitjbGFzcyBD
YWNoZTsKK30KKwogY2xhc3MgTmV0d29ya1Byb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBw
cml2YXRlIERvd25sb2FkTWFuYWdlcjo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShOZXR3b3JrUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPE5ldHdv
cmtQcm9jZXNzPjsKQEAgLTg2LDYgKzkwLDkgQEAgcHVibGljOgogCiAgICAgQXV0aGVudGljYXRp
b25NYW5hZ2VyJiBhdXRoZW50aWNhdGlvbk1hbmFnZXIoKTsKICAgICBEb3dubG9hZE1hbmFnZXIm
IGRvd25sb2FkTWFuYWdlcigpOworCisgICAgTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUoKSB7
IHJldHVybiBtX2NhY2hlLmdldCgpOyB9CisKICAgICBib29sIGNhbkhhbmRsZUhUVFBTU2VydmVy
VHJ1c3RFdmFsdWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbjsgfQogCiAgICAgdm9pZCBwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
KGJvb2wmIGhhbmRsZWQpOwpAQCAtMjIwLDYgKzIyNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOwogICAgIFNlY29uZHMgbV9sb2Fk
VGhyb3R0bGVMYXRlbmN5OwogCisgICAgUmVmUHRyPE5ldHdvcmtDYWNoZTo6Q2FjaGU+IG1fY2Fj
aGU7CisKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gTmV0d29ya1By
b2Nlc3NTdXBwbGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcCBtX3N1
cHBsZW1lbnRzOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3Jr
UmVzb3VyY2VMbwogICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX2RlZmVy
c0xvYWRpbmcocGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQogICAgICwgbV9idWZmZXJpbmdUaW1l
cigqdGhpcywgJk5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCkKKyAg
ICAsIG1fY2FjaGUoc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSA/IG51bGxwdHIgOiBOZXR3b3Jr
UHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBl
eGlzdGVuY2Ugb2YgRW1wdHlGcmFtZUxvYWRlckNsaWVudCBpbiBXZWJDb3JlLgpAQCAtMTIxLDEw
ICsxMjIsMTAgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVz
ZUNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKIHsKLSAgICBpZiAo
IU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKKyAgICBpZiAoIW1fY2Fj
aGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIXNlc3Npb25JRCgpLmlzRXBo
ZW1lcmFsKCkpOworCiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5j
YWNoZVBvbGljeSgpID09IFdlYkNvcmU6OkRvTm90VXNlQW55Q2FjaGUpCkBAIC0xODEsNyArMTgy
LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2FjaAogICAgIEFTU0VS
VChjYW5Vc2VDYWNoZShyZXF1ZXN0KSk7CiAKICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9h
ZGVyPiBsb2FkZXIodGhpcyk7Ci0gICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZXRyaWV2
ZShyZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFt
ZUlEIH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3ZlKGxvYWRlciksIHJlcXVlc3RdKGF1dG8gZW50
cnkpIHsKKyAgICBtX2NhY2hlLT5yZXRyaWV2ZShyZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQ
YWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlEIH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3Zl
KGxvYWRlciksIHJlcXVlc3RdKGF1dG8gZW50cnkpIHsKICAgICAgICAgaWYgKGxvYWRlci0+aGFz
T25lUmVmKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBsb2FkZXIgaGFzIGJlZW4gYWJvcnRlZCBh
bmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5IHRoaXMgbGFtYmRhLgogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzA3LDcgKzMwOCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgp
CiAgICAgICAgIGlmIChjYW5Vc2VDYWNoZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVzdCgp
KSkgewogICAgICAgICAgICAgLy8gV2UgbWlnaHQgYWxyZWFkeSBoYXZlIHVzZWQgZGF0YSBmcm9t
IHRoaXMgaW5jb21wbGV0ZSBsb2FkLiBFbnN1cmUgb2xkZXIgdmVyc2lvbnMgZG9uJ3QgcmVtYWlu
IGluIHRoZSBjYWNoZSBhZnRlciBjYW5jZWwuCiAgICAgICAgICAgICBpZiAoIW1fcmVzcG9uc2Uu
aXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1v
dmUobV9uZXR3b3JrTG9hZC0+Y3VycmVudFJlcXVlc3QoKSk7CisgICAgICAgICAgICAgICAgbV9j
YWNoZS0+cmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOwogICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2FuY2VsKCk7CkBAIC0zMzQsNyArMzM1
LDcgQEAgYXV0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZQogICAgIGlmICht
X2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSB7CiAgICAgICAgIGJvb2wgdmFsaWRhdGlvblN1Y2Nl
ZWRlZCA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9k
aWZpZWQKICAgICAgICAgaWYgKHZhbGlkYXRpb25TdWNjZWVkZWQpIHsKLSAgICAgICAgICAgIG1f
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0
ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRl
cnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7
CisgICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbV9jYWNoZS0+dXBkYXRl
KG9yaWdpbmFsUmVxdWVzdCgpLCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVy
cy53ZWJGcmFtZUlEIH0sICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsK
ICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHdhcyBjb25kaXRpb25hbCB0aGVuIHRoaXMg
cmV2YWxpZGF0aW9uIHdhcyBub3QgdHJpZ2dlcmVkIGJ5IHRoZSBuZXR3b3JrIGNhY2hlIGFuZCB3
ZSBwYXNzIHRoZSAzMDQgcmVzcG9uc2UgdG8gV2ViQ29yZS4KICAgICAgICAgICAgIGlmIChvcmln
aW5hbFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCiAgICAgICAgICAgICAgICAgbV9jYWNoZUVu
dHJ5Rm9yVmFsaWRhdGlvbiA9IG51bGxwdHI7CkBAIC00NzAsNyArNDcxLDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVkaQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgaWYgKGNhblVzZUNhY2hlZFJlZGlyZWN0KHJlcXVlc3QpKQotICAgICAgICBOZXR3
b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKKyAgICAgICAgbV9jYWNoZS0+c3RvcmVSZWRpcmVjdChy
ZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCByZWRpcmVjdFJlcXVlc3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocmVxdWVzdCk7CiAjZW5kaWYKQEAgLTU1OSw3ICs1NjAsNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5U3RvcmVBc0NhCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLnN0b3JlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdU
Rk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0o
YXV0byYgbWFwcGVkQm9keSkgbXV0YWJsZSB7CisgICAgbV9jYWNoZS0+c3RvcmUobV9uZXR3b3Jr
TG9hZC0+Y3VycmVudFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGTW92ZShtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKSwgW2xvYWRlciA9IG1ha2VSZWYoKnRoaXMpXShhdXRvJiBtYXBwZWRCb2R5KSBt
dXRhYmxlIHsKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAobWFw
cGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTU4OCw3ICs1ODksNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
UmV0cmlldmVDCiAKICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogbV9wYXJhbWV0ZXJzLmRlcml2
ZWRDYWNoZWREYXRhVHlwZXNUb1JldHJpZXZlKSB7CiAgICAgICAgICAgICBOZXR3b3JrQ2FjaGU6
OkRhdGFLZXkga2V5IHsgb3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKSwgdHlwZSwg
Ym9keUhhc2ggfTsKLSAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmll
dmVEYXRhKGtleSwgW2xvYWRlciA9IG1ha2VSZWYoKnRoaXMpLCBlbnRyeVB0ciwgdHlwZSwgcmV0
cmlldmVDb3VudF0gKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIG1fY2FjaGUtPnJldHJpZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVm
KCp0aGlzKSwgZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgbG9hZGVyLT5tX3Jl
dHJpZXZlZERlcml2ZWREYXRhQ291bnQrKzsKICAgICAgICAgICAgICAgICBib29sIHJldHJpZXZl
ZEFsbCA9IGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50ID09IHJldHJpZXZlQ291
bnQ7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+
IGVudHJ5KHJldHJpZXZlZEFsbCA/IGVudHJ5UHRyIDogbnVsbHB0cik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJ
KHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsNyBAQCBwcml2
YXRlOgogCiAgICAgV2ViQ29yZTo6VGltZXIgbV9idWZmZXJpbmdUaW1lcjsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKyAgICBSZWZQdHI8TmV0d29ya0NhY2hlOjpDYWNoZT4gbV9jYWNoZTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcmVkRGF0YUZvckNhY2hl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBtX2NhY2hlRW50cnlG
b3JWYWxpZGF0aW9uOwogICAgIGJvb2wgbV9pc1dhaXRpbmdDb250aW51ZVdpbGxTZW5kUmVxdWVz
dEZvckNhY2hlZFJlZGlyZWN0IHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDIyMDE5
OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDEwICs2MiwxNiBAQCBzdGF0aWMgY29uc3QgQXRvbWlj
U3RyaW5nJiByZXNvdXJjZVR5cGUoCiAgICAgcmV0dXJuIHJlc291cmNlOwogfQogCi1DYWNoZSYg
c2luZ2xldG9uKCkKK1JlZlB0cjxDYWNoZT4gQ2FjaGU6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNo
ZVBhdGgsIE9wdGlvblNldDxPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPENhY2hlPiBpbnN0YW5jZTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byBz
dG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9u
OjpUZXN0aW5nTW9kZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6
Tm9ybWFsKTsKKworICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5l
ZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFzdG9yYWdlKTsKKworICAgIGlmICghc3Rv
cmFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDYWNoZShzdG9yYWdlLnJlbGVhc2VOb25OdWxsKCksIG9wdGlvbnMpKTsKIH0KIAogI2lmIFBM
QVRGT1JNKEdUSykKQEAgLTc1LDEwICs4MSw5IEBAIHN0YXRpYyB2b2lkIGR1bXBGaWxlQ2hhbmdl
ZChDYWNoZSogY2FjaGUKIH0KICNlbmRpZgogCi1ib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKQorQ2FjaGU6OkNh
Y2hlKFJlZjxTdG9yYWdlPiYmIHN0b3JhZ2UsIE9wdGlvblNldDxPcHRpb24+IG9wdGlvbnMpCisg
ICAgOiBtX3N0b3JhZ2UoV1RGTW92ZShzdG9yYWdlKSkKIHsKLSAgICBtX3N0b3JhZ2UgPSBTdG9y
YWdlOjpvcGVuKGNhY2hlUGF0aCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlRlc3RpbmdNb2Rl
KSA/IFN0b3JhZ2U6Ok1vZGU6OlRlc3RpbmcgOiBTdG9yYWdlOjpNb2RlOjpOb3JtYWwpOwotCiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIGlm
IChvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24pKSB7CiAg
ICAgICAgIG1fbG93UG93ZXJNb2RlTm90aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6
Okxvd1Bvd2VyTW9kZU5vdGlmaWVyPihbdGhpc10oYm9vbCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQp
IHsKQEAgLTg3LDQ0ICs5Miw0MSBAQCBib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYgY2FjCiAgICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyKTsKLSAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KCptX3N0b3JhZ2Up
OworICAgICAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKnRoaXMsIG1fc3RvcmFnZS5nZXQoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoIW1fbG93UG93ZXJNb2RlTm90
aWZpZXItPmlzTG93UG93ZXJNb2RlRW5hYmxlZCgpKQotICAgICAgICAgICAgbV9zcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPigq
bV9zdG9yYWdlKTsKKyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6
bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKnRoaXMsIG1fc3RvcmFnZS5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OkVm
ZmljYWN5TG9nZ2luZykpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4o
Y2FjaGVQYXRoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6b3BlbigqdGhp
cywgbV9zdG9yYWdlLT5iYXNlUGF0aCgpKTsKIAorICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKE9w
dGlvbjo6UmVnaXN0ZXJOb3RpZnkpKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gVHJp
Z2dlcnMgd2l0aCAibm90aWZ5dXRpbCAtcCBjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLgot
ICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgLy8gVHJpZ2dlcnMgd2l0aCAibm90aWZ5dXRp
bCAtcCBjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLgogICAgICAgICBpbnQgdG9rZW47CiAg
ICAgICAgIG5vdGlmeV9yZWdpc3Rlcl9kaXNwYXRjaCgiY29tLmFwcGxlLldlYktpdC5DYWNoZS5k
dW1wIiwgJnRva2VuLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKGludCkgewogICAgICAg
ICAgICAgZHVtcENvbnRlbnRzVG9GaWxlKCk7CiAgICAgICAgIH0pOwotICAgIH0KICNlbmRpZgog
I2lmIFBMQVRGT1JNKEdUSykKLSAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAkY2FjaGVQYXRo
L2R1bXAiLgotICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgLy8gVHJpZ2dlcnMgd2l0aCAi
dG91Y2ggJGNhY2hlUGF0aC9kdW1wIi4KICAgICAgICAgQ1N0cmluZyBkdW1wRmlsZVBhdGggPSBX
ZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1bXAiKSk7CiAgICAgICAgIEdSZWZQ
dHI8R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZHVtcEZp
bGVQYXRoLmRhdGEoKSkpOwogICAgICAgICBHRmlsZU1vbml0b3IqIG1vbml0b3IgPSBnX2ZpbGVf
bW9uaXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVfTU9OSVRPUl9OT05FLCBudWxscHRy
LCBudWxscHRyKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1vbml0b3IsICJj
aGFuZ2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9CiAjZW5k
aWYKKyAgICB9Cit9CiAKLSAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBv
cGVuZWQgY2FjaGUgc3RvcmFnZSwgc3VjY2VzcyAlZCIsICEhbV9zdG9yYWdlKTsKLSAgICByZXR1
cm4gISFtX3N0b3JhZ2U7CitDYWNoZTo6fkNhY2hlKCkKK3sKIH0KIAogdm9pZCBDYWNoZTo6c2V0
Q2FwYWNpdHkoc2l6ZV90IG1heGltdW1TaXplKQogewotICAgIGlmICghbV9zdG9yYWdlKQotICAg
ICAgICByZXR1cm47CiAgICAgbV9zdG9yYWdlLT5zZXRDYXBhY2l0eShtYXhpbXVtU2l6ZSk7CiB9
CiAKQEAgLTMxNSw3ICszMTcsNiBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNp
c2lvbihjCiAKIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgRnVuY3Rpb248dm9p
ZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
QVNTRVJUKGlzRW5hYmxlZCgpKTsKICAgICBBU1NFUlQocmVxdWVzdC51cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpOwogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgcmV0cmlldmluZyAlcyBwcmlvcml0eSAlZCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlvcml0eSgpKSk7CkBAIC0z
NTUsNyArMzU2LDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwog
ICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAg
ICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXF1ZXN0LnByaW9yaXR5
KCkpOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3Ro
aXMsIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNvcmQpIHsKKyAgICBt
X3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1lSURdKGF1
dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBMT0coTmV0
d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOwogCkBA
IC00MDgsNyArNDA5LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6bWFrZVJlZGly
ZQogCiBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwg
RnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKHJlc3BvbnNlRGF0YSk7CiAKICAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdG9yaW5nICVzLCBwYXJ0aXRpb24g
JXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgbWFrZUNhY2hlS2V5
KHJlcXVlc3QpLnBhcnRpdGlvbigpLmxhdGluMSgpLmRhdGEoKSk7CkBAIC00MzMsNyArNDMzLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29ucwogICAgIGF1dG8gY2Fj
aGVFbnRyeSA9IG1ha2VFbnRyeShyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZURh
dGEpKTsKICAgICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnktPmVuY29kZUFzU3RvcmFnZVJlY29y
ZCgpOwogCi0gICAgbV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIFt0aGlzLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShjb25zdCBEYXRhJiBib2R5RGF0YSkg
eworICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShjb25zdCBEYXRhJiBib2R5RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJv
ZHk7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKICAgICAgICAgaWYgKGNhblVzZVNo
YXJlZE1lbW9yeUZvckJvZHlEYXRhKCkpIHsKQEAgLTQ1Myw4ICs0NTMsNiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zCiAKIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4g
Q2FjaGU6OnN0b3JlUmVkaXJlY3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKGlz
RW5hYmxlZCgpKTsKLQogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0
b3JpbmcgcmVkaXJlY3QgJXMgLT4gJXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgp
LmRhdGEoKSwgcmVkaXJlY3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7
CiAKICAgICBTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24gPSBtYWtlU3RvcmVEZWNpc2lvbihy
ZXF1ZXN0LCByZXNwb25zZSwgMCk7CkBAIC00OTUsOCArNDkzLDYgQEAgc3RkOjp1bmlxdWVfcHRy
PEVudHJ5PiBDYWNoZTo6dXBkYXRlKGNvbgogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgS2V5
JiBrZXkpCiB7Ci0gICAgQVNTRVJUKGlzRW5hYmxlZCgpKTsKLQogICAgIG1fc3RvcmFnZS0+cmVt
b3ZlKGtleSk7CiB9CiAKQEAgLTUwNywxNSArNTAzLDExIEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShj
b25zdCBXZWJDb3JlOjpSZXNvdXIKIAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IFZlY3RvcjxL
ZXk+JiBrZXlzLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0KICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXlzLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGU6OnRyYXZlcnNlKEZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFRyYXZlcnNhbEVudHJ5Kik+JiYgdHJhdmVyc2VIYW5kbGVyKQogewot
ICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0KICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY2xpZW50
cyBtYWtpbmcgZXhjZXNzaXZlIHRyYXZlcnNhbCByZXF1ZXN0cy4KICAgICBjb25zdCB1bnNpZ25l
ZCBtYXhpbXVtVHJhdmVyc2VDb3VudCA9IDM7CiAgICAgaWYgKG1fdHJhdmVyc2VDb3VudCA+PSBt
YXhpbXVtVHJhdmVyc2VDb3VudCkgewpAQCAtNTI5LDcgKzUyMSw3IEBAIHZvaWQgQ2FjaGU6OnRy
YXZlcnNlKEZ1bmN0aW9uPHZvaWQgKGNvbnMKIAogICAgICsrbV90cmF2ZXJzZUNvdW50OwogCi0g
ICAgbV9zdG9yYWdlLT50cmF2ZXJzZShyZXNvdXJjZVR5cGUoKSwgMCwgW3RoaXMsIHRyYXZlcnNl
SGFuZGxlciA9IFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKV0oY29uc3QgU3RvcmFnZTo6UmVjb3Jk
KiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8mIHJlY29yZEluZm8pIHsKKyAgICBt
X3N0b3JhZ2UtPnRyYXZlcnNlKHJlc291cmNlVHlwZSgpLCAwLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCB0cmF2ZXJzZUhhbmRsZXIgPSBXVEZNb3ZlKHRyYXZlcnNlSGFu
ZGxlcildKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNv
cmRJbmZvJiByZWNvcmRJbmZvKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAg
ICAtLW1fdHJhdmVyc2VDb3VudDsKICAgICAgICAgICAgIHRyYXZlcnNlSGFuZGxlcihudWxscHRy
KTsKQEAgLTU1Miw4ICs1NDQsNiBAQCBTdHJpbmcgQ2FjaGU6OmR1bXBGaWxlUGF0aCgpIGNvbnN0
CiAKIHZvaWQgQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0b3Jh
Z2UpCi0gICAgICAgIHJldHVybjsKICAgICBhdXRvIGZkID0gV2ViQ29yZTo6b3BlbkZpbGUoZHVt
cEZpbGVQYXRoKCksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKCFXZWJDb3JlOjpp
c0hhbmRsZVZhbGlkKGZkKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjIwLDEwICs2MTAsNiBAQCB2
b2lkIENhY2hlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2NsCiAgICAgaWYgKG1fc3RhdGlz
dGljcykKICAgICAgICAgbV9zdGF0aXN0aWNzLT5jbGVhcigpOwogCi0gICAgaWYgKCFtX3N0b3Jh
Z2UpIHsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBTdHJpbmcgYW55VHlwZTsK
ICAgICBtX3N0b3JhZ2UtPmNsZWFyKGFueVR5cGUsIG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIApAQCAtNjM3LDEzICs2MjMsMTEgQEAgdm9pZCBDYWNoZTo6Y2xl
YXIoKQogCiBTdHJpbmcgQ2FjaGU6OnJlY29yZHNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zdG9yYWdlID8gbV9zdG9yYWdlLT5yZWNvcmRzUGF0aCgpIDogU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fc3RvcmFnZS0+cmVjb3Jkc1BhdGgoKTsKIH0KIAogdm9pZCBDYWNoZTo6cmV0cmlldmVE
YXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKGlz
RW5hYmxlZCgpKTsKLQogICAgIEtleSBrZXkgeyBkYXRhS2V5LCBtX3N0b3JhZ2UtPnNhbHQoKSB9
OwogICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICgh
cmVjb3JkIHx8ICFyZWNvcmQtPmJvZHkuc2l6ZSgpKSB7CkBAIC02NTcsOCArNjQxLDYgQEAgdm9p
ZCBDYWNoZTo6cmV0cmlldmVEYXRhKGNvbnN0IERhdGFLZXkmIAogCiB2b2lkIENhY2hlOjpzdG9y
ZURhdGEoY29uc3QgRGF0YUtleSYgZGF0YUtleSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2UpCi0gICAgICAgIHJldHVybjsKICAgICBLZXkg
a2V5IHsgZGF0YUtleSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKICAgICBTdG9yYWdlOjpSZWNvcmQg
cmVjb3JkIHsga2V5LCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSwgeyB9LCBEYXRh
IHsgZGF0YSwgc2l6ZSB9LCB7IH0gfTsKICAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgeyB9
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5l
dHdvcmtDYWNoZV9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZV9oCisjcHJhZ21hIG9uY2UKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCkBAIC01MCw4ICs0OSw2IEBAIGNsYXNzIENhY2hlOwog
Y2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjsKIGNsYXNzIFN0YXRpc3RpY3M7CiAKLUNhY2hl
JiBzaW5nbGV0b24oKTsKLQogc3RydWN0IE1hcHBlZEJvZHkgewogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNv
dXJjZTsKQEAgLTkxLDIyICs4OCwyMCBAQCBlbnVtIGNsYXNzIFVzZURlY2lzaW9uIHsKIAogdXNp
bmcgR2xvYmFsRnJhbWVJRCA9IHN0ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50
NjRfdCAvKndlYkZyYW1lSUQqLz47CiAKLWNsYXNzIENhY2hlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDYWNoZSk7Ci0gICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q2Fj
aGU+OworY2xhc3MgQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZT4gewogcHVibGljOgog
ICAgIGVudW0gY2xhc3MgT3B0aW9uIHsKICAgICAgICAgRWZmaWNhY3lMb2dnaW5nID0gMSA8PCAw
LAogICAgICAgICAvLyBJbiB0ZXN0aW5nIG1vZGUgd2UgdHJ5IHRvIGVsaW1pbmF0ZSBzb3VyY2Vz
IG9mIHJhbmRvbW5lc3MuIENhY2hlIGRvZXMgbm90IHNocmluayBhbmQgdGhlcmUgYXJlIG5vIHJl
YWQgdGltZW91dHMuCiAgICAgICAgIFRlc3RpbmdNb2RlID0gMSA8PCAxLAorICAgICAgICBSZWdp
c3Rlck5vdGlmeSA9IDEgPDwgMiwKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04pCi0gICAgICAgIFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uID0gMSA8PCAy
LAorICAgICAgICBTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IDEgPDwgMywKICNlbmRpZgogICAg
IH07Ci0gICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBPcHRpb25T
ZXQ8T3B0aW9uPik7Ci0gICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOworICAgIHN0YXRpYyBS
ZWZQdHI8Q2FjaGU+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE9wdGlvblNldDxPcHRp
b24+KTsKIAotICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gISFtX3N0b3JhZ2U7
IH0KKyAgICB2b2lkIHNldENhcGFjaXR5KHNpemVfdCk7CiAKICAgICAvLyBDb21wbGV0aW9uIGhh
bmRsZXIgbWF5IGdldCBjYWxsZWQgYmFjayBzeW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCiAgICAg
dm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9i
YWxGcmFtZUlEJiwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+JiYpOwpA
QCAtMTM1LDIyICsxMzAsMjMgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcENvbnRlbnRzVG9GaWxl
KCk7CiAKICAgICBTdHJpbmcgcmVjb3Jkc1BhdGgoKSBjb25zdDsKLSAgICBib29sIGNhblVzZVNo
YXJlZE1lbW9yeUZvckJvZHlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlICYmIG1fc3Rv
cmFnZS0+Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKTsgfQorICAgIGJvb2wgY2FuVXNl
U2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPmNhblVz
ZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRhKCk7IH0KIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
X1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAgICBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKiBz
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKCkgeyByZXR1cm4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmdldCgpOyB9CiAjZW5kaWYKIAorICAgIH5DYWNoZSgpOworCiBwcml2YXRlOgotICAgIENhY2hl
KCkgPSBkZWZhdWx0OwotICAgIH5DYWNoZSgpID0gZGVsZXRlOworICAgIENhY2hlKFJlZjxTdG9y
YWdlPiYmLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKTsKIAogICAgIEtleSBtYWtlQ2FjaGVL
ZXkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBTdHJpbmcgZHVtcEZp
bGVQYXRoKCkgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVEdW1wRmlsZSgpOwogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBSZWY8U3RvcmFnZT4gbV9zdG9yYWdl
OwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TG93UG93ZXJNb2RlTm90aWZpZXI+IG1fbG93UG93
ZXJNb2RlTm90aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXI+IG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlcjsKQEAgLTE2Myw0ICsxNTksMyBAQCBwcml2YXRl
OgogfQogfQogI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAy
MjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KQEAgLTE0Niw3ICsxNDcsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IEVu
dHJ5OjpkZWNvZGVTdG9yCiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKIHZvaWQgRW50
cnk6OmluaXRpYWxpemVTaGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3JkKCkg
Y29uc3QKIHsKLSAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2FuVXNlU2hhcmVk
TWVtb3J5Rm9yQm9keURhdGEoKSkKKyAgICBhdXRvKiBjYWNoZSA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5jYWNoZSgpOworICAgIGlmICghY2FjaGUgfHwgIWNhY2hlLT5jYW5Vc2VTaGFy
ZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNoYXJl
ZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRyeUNyZWF0ZVNoYXJlZE1lbW9y
eSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAkocmV2aXNpb24g
MjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZUxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw5IEBAIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU3Bl
Y3VsYXRpdmVMb2FkOjpTcGVjdWxhdGl2ZUxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJ
RCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlOjpFbnRyeT4gY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIFJldmFsaWRhdGlvbkNvbXBs
ZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgOiBtX2ZyYW1lSUQoZnJhbWVJ
RCkKK1NwZWN1bGF0aXZlTG9hZDo6U3BlY3VsYXRpdmVMb2FkKENhY2hlJiBjYWNoZSwgY29uc3Qg
R2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBz
dGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24sIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCisg
ICAgOiBtX2NhY2hlKGNhY2hlKQorICAgICwgbV9mcmFtZUlEKGZyYW1lSUQpCiAgICAgLCBtX2Nv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICwgbV9vcmln
aW5hbFJlcXVlc3QocmVxdWVzdCkKICAgICAsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKSkKQEAgLTcxLDEwICs3MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlTG9h
ZDo6d2lsbFNlbmRSZWRpcmVjdGVkCiB7CiAgICAgTE9HKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
UHJlbG9hZGluZywgIlNwZWN1bGF0aXZlIHJlZGlyZWN0ICVzIC0+ICVzIiwgcmVxdWVzdC51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRpcmVjdFJlcXVlc3QudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpLnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RS
ZXF1ZXN0KTsKKyAgICBtX2NhY2hlRW50cnkgPSBtX2NhY2hlLT5zdG9yZVJlZGlyZWN0KHJlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CiAgICAgLy8gQ3JlYXRlIGEg
c3ludGhldGljIGNhY2hlIGVudHJ5IGlmIHdlIGNhbid0IHN0b3JlLgogICAgIGlmICghbV9jYWNo
ZUVudHJ5KQotICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigp
Lm1ha2VSZWRpcmVjdEVudHJ5KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVx
dWVzdCk7CisgICAgICAgIG1fY2FjaGVFbnRyeSA9IG1fY2FjaGUtPm1ha2VSZWRpcmVjdEVudHJ5
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CiAKICAgICAvLyBE
b24ndCBmb2xsb3cgdGhlIHJlZGlyZWN0LiBUaGUgcmVkaXJlY3QgdGFyZ2V0IHdpbGwgYmUgcmVn
aXN0ZXJlZCBmb3Igc3BlY3VsYXRpdmUgbG9hZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAgICBkaWRD
b21wbGV0ZSgpOwpAQCAtODksNyArOTAsNyBAQCBhdXRvIFNwZWN1bGF0aXZlTG9hZDo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlCiAKICAgICBib29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgaWYgKHZh
bGlkYXRpb25TdWNjZWVkZWQgJiYgbV9jYWNoZUVudHJ5KQotICAgICAgICBtX2NhY2hlRW50cnkg
PSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZShtX29yaWdpbmFsUmVxdWVzdCwgbV9m
cmFtZUlELCAqbV9jYWNoZUVudHJ5LCBtX3Jlc3BvbnNlKTsKKyAgICAgICAgbV9jYWNoZUVudHJ5
ID0gbV9jYWNoZS0+dXBkYXRlKG1fb3JpZ2luYWxSZXF1ZXN0LCBtX2ZyYW1lSUQsICptX2NhY2hl
RW50cnksIG1fcmVzcG9uc2UpOwogICAgIGVsc2UKICAgICAgICAgbV9jYWNoZUVudHJ5ID0gbnVs
bHB0cjsKIApAQCAtMTE1LDEwICsxMTYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZp
bmlzaExvYWRpbmcoYwogICAgIGlmIChtX2RpZENvbXBsZXRlKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCFtX2NhY2hlRW50cnkgJiYgbV9idWZmZXJlZERhdGFGb3JDYWNoZSkgewotICAgICAg
ICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlKG1fb3JpZ2lu
YWxSZXF1ZXN0LCBtX3Jlc3BvbnNlLCBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLmNvcHlSZWYoKSwg
W10oYXV0byYgbWFwcGVkQm9keSkgeyB9KTsKKyAgICAgICAgbV9jYWNoZUVudHJ5ID0gbV9jYWNo
ZS0+c3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWREYXRhRm9y
Q2FjaGUuY29weVJlZigpLCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOwogICAgICAgICAvLyBD
cmVhdGUgYSBzeW50aGV0aWMgY2FjaGUgZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAgICAg
IGlmICghbV9jYWNoZUVudHJ5ICYmIGlzU3RhdHVzQ29kZUNhY2hlYWJsZUJ5RGVmYXVsdChtX3Jl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpKQotICAgICAgICAgICAgbV9jYWNoZUVudHJ5ID0gTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVz
cG9uc2UsIFdURk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOworICAgICAgICAgICAgbV9j
YWNoZUVudHJ5ID0gbV9jYWNoZS0+bWFrZUVudHJ5KG1fb3JpZ2luYWxSZXF1ZXN0LCBtX3Jlc3Bv
bnNlLCBXVEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpKTsKICAgICB9CiAKICAgICBkaWRD
b21wbGV0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCShyZXZpc2lv
biAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlTG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04pCiAKQEAgLTQ1LDcgKzQ0LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVMb2Fk
IGZpbmFsIDogcHVibGljIE5ldAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIHR5cGVkZWYgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZTo6RW50cnk+KT4gUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXI7Ci0gICAgU3BlY3VsYXRp
dmVMb2FkKGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4sIFJldmFsaWRhdGlvbkNv
bXBsZXRpb25IYW5kbGVyJiYpOworICAgIFNwZWN1bGF0aXZlTG9hZChDYWNoZSYsIGNvbnN0IEds
b2JhbEZyYW1lSUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4sIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVy
JiYpOwogCiAgICAgdmlydHVhbCB+U3BlY3VsYXRpdmVMb2FkKCk7CiAKQEAgLTY2LDYgKzY1LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkQ29tcGxldGUoKTsKIAorICAgIFJlZjxDYWNoZT4g
bV9jYWNoZTsKICAgICBHbG9iYWxGcmFtZUlEIG1fZnJhbWVJRDsKICAgICBSZXZhbGlkYXRpb25D
b21wbGV0aW9uSGFuZGxlciBtX2NvbXBsZXRpb25IYW5kbGVyOwogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCBtX29yaWdpbmFsUmVxdWVzdDsKQEAgLTgzLDUgKzgzLDMgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEVf
U1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQotCi0jZW5kaWYgLy8gTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ1LDggKzI0NSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFJldHJp
ZXZlRXhpc3RpbmdFbnRyeSB7IGZhbHNlIH07CiB9OwogCi1TcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
OjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKFN0b3JhZ2UmIHN0b3JhZ2UpCi0gICAgOiBtX3N0b3Jh
Z2Uoc3RvcmFnZSkKK1NwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIoQ2FjaGUmIGNhY2hlLCBTdG9yYWdlJiBzdG9yYWdlKQorICAgIDogbV9jYWNoZShjYWNoZSkK
KyAgICAsIG1fc3RvcmFnZShzdG9yYWdlKQogewogfQogCkBAIC00NjYsNyArNDY3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXZhbGlkYXRlUwogCiAgICAgTE9HKE5ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgU3BlY3VsYXRpdmVs
eSByZXZhbGlkYXRpbmcgJyVzJzoiLCBrZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgYXV0byByZXZhbGlkYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2Fk
PihmcmFtZUlELCByZXZhbGlkYXRpb25SZXF1ZXN0LCBXVEZNb3ZlKGVudHJ5KSwgW3RoaXMsIGtl
eSwgcmV2YWxpZGF0aW9uUmVxdWVzdCwgZnJhbWVJRF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBy
ZXZhbGlkYXRlZEVudHJ5KSB7CisgICAgYXV0byByZXZhbGlkYXRvciA9IHN0ZDo6bWFrZV91bmlx
dWU8U3BlY3VsYXRpdmVMb2FkPihtX2NhY2hlLCBmcmFtZUlELCByZXZhbGlkYXRpb25SZXF1ZXN0
LCBXVEZNb3ZlKGVudHJ5KSwgW3RoaXMsIGtleSwgcmV2YWxpZGF0aW9uUmVxdWVzdCwgZnJhbWVJ
RF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiByZXZhbGlkYXRlZEVudHJ5KSB7CiAgICAgICAgIEFT
U0VSVCghcmV2YWxpZGF0ZWRFbnRyeSB8fCAhcmV2YWxpZGF0ZWRFbnRyeS0+bmVlZHNWYWxpZGF0
aW9uKCkpOwogICAgICAgICBBU1NFUlQoIXJldmFsaWRhdGVkRW50cnkgfHwgcmV2YWxpZGF0ZWRF
bnRyeS0+a2V5KCkgPT0ga2V5KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFN1YnJlc291cmNlc0VudHJ5Owog
Y2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcihTdG9yYWdl
Jik7CisgICAgZXhwbGljaXQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcihDYWNoZSYsIFN0b3JhZ2Um
KTsKICAgICB+U3BlY3VsYXRpdmVMb2FkTWFuYWdlcigpOwogCiAgICAgdm9pZCByZWdpc3Rlckxv
YWQoY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IEtleSYgcmVzb3VyY2VLZXkpOwpAQCAtNzAsNiArNzAsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBib29sIGNhblVzZVByZWxvYWRlZEVudHJ5KGNvbnN0IFByZWxvYWRlZEVudHJ5Jiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KTsKICAgICBzdGF0
aWMgYm9vbCBjYW5Vc2VQZW5kaW5nUHJlbG9hZChjb25zdCBTcGVjdWxhdGl2ZUxvYWQmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOwogCisgICAgQ2FjaGUm
IG1fY2FjaGU7CiAgICAgU3RvcmFnZSYgbV9zdG9yYWdlOwogCiAgICAgY2xhc3MgUGVuZGluZ0Zy
YW1lTG9hZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjIwMTk4
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTYgKzc0LDE3IEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZToKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPFN0YXRpc3RpY3M+IFN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgpCitzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gU3RhdGlzdGljczo6b3BlbihD
YWNoZSYgY2FjaGUsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgU3RhdGlzdGljc0RhdGFiYXNlTmFtZSk7
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U3RhdGlzdGljcz4oZGF0YWJhc2VQYXRoKTsK
KyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdGF0aXN0aWNzPihjYWNoZSwgZGF0YWJhc2VQ
YXRoKTsKIH0KIAotU3RhdGlzdGljczo6U3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNl
UGF0aCkKLSAgICA6IG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
ImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5CYWNrZ3JvdW5kIiwgV29ya1F1ZXVl
OjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kKSkKK1N0YXRpc3RpY3M6
OlN0YXRpc3RpY3MoQ2FjaGUmIGNhY2hlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKKyAg
ICA6IG1fY2FjaGUoY2FjaGUpCisgICAgLCBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3MuQmFja2dyb3Vu
ZCIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZCkp
CiAgICAgLCBtX3dyaXRlVGltZXIoKnRoaXMsICZTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQp
CiB7CiAgICAgaW5pdGlhbGl6ZShkYXRhYmFzZVBhdGgpOwpAQCAtOTUsNyArOTYsNyBAQCB2b2lk
IFN0YXRpc3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nCiAKICAgICBhdXRvIHN0YXJ0VGlt
ZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCi0gICAgc2VyaWFsQmFja2dy
b3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgZGF0YWJhc2VQYXRoID0gZGF0YWJhc2VQYXRo
Lmlzb2xhdGVkQ29weSgpLCBuZXR3b3JrQ2FjaGVQYXRoID0gc2luZ2xldG9uKCkucmVjb3Jkc1Bh
dGgoKS5pc29sYXRlZENvcHkoKSwgc3RhcnRUaW1lXSB7CisgICAgc2VyaWFsQmFja2dyb3VuZElP
UXVldWUoKS5kaXNwYXRjaChbdGhpcywgZGF0YWJhc2VQYXRoID0gZGF0YWJhc2VQYXRoLmlzb2xh
dGVkQ29weSgpLCBuZXR3b3JrQ2FjaGVQYXRoID0gbV9jYWNoZS5yZWNvcmRzUGF0aCgpLCBzdGFy
dFRpbWVdIHsKICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgICAgIGlmICghV2ViQ29yZTo6bWFr
ZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkpCkBA
IC0xNzgsNyArMTc5LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAKICAg
ICBjbGVhcigpOwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhp
cywgbmV0d29ya0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0ZWRD
b3B5KCldIHsKKyAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBu
ZXR3b3JrQ2FjaGVQYXRoID0gbV9jYWNoZS5yZWNvcmRzUGF0aCgpXSB7CiAgICAgICAgIGJvb3Rz
dHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29ya0NhY2hlUGF0aCk7CiAgICAgICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0YXRpc3RpY3MgY2FjaGUgc2hyaW5rIGNvbXBs
ZXRlZCBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
YXBwcm94aW1hdGVFbnRyeUNvdW50KSk7CiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDggQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIFN0YXRpc3RpY3MgewogcHVi
bGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gb3Blbihjb25zdCBT
dHJpbmcmIGNhY2hlUGF0aCk7Ci0gICAgZXhwbGljaXQgU3RhdGlzdGljcyhjb25zdCBTdHJpbmcm
IGRhdGFiYXNlUGF0aCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPiBv
cGVuKENhY2hlJiwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworICAgIGV4cGxpY2l0IFN0YXRp
c3RpY3MoQ2FjaGUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAKICAgICB2b2lkIGNs
ZWFyKCk7CiAKQEAgLTc3LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICAgICAgUmVxdWVzdGVkQ29t
cGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKIAorICAgIENhY2hlJiBt
X2NhY2hlOworCiAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlDb3Vu
dCB7IDAgfTsKIAogICAgIG11dGFibGUgUmVmPFdvcmtRdWV1ZT4gbV9zZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDE0ICs1MywxNyBAQCBzdGF0aWMgZG91YmxlIGNvbXB1
dGVSZWNvcmRXb3J0aChGaWxlVGltCiBzdHJ1Y3QgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUmVhZE9wZXJhdGlvbihj
b25zdCBLZXkmIGtleSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5k
bGVyKQotICAgICAgICA6IGtleShrZXkpCisgICAgUmVhZE9wZXJhdGlvbihTdG9yYWdlJiBzdG9y
YWdlLCBjb25zdCBLZXkmIGtleSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRp
b25IYW5kbGVyKQorICAgICAgICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCBrZXkoa2V5
KQogICAgICAgICAsIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KQogICAgIHsgfQogCiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICBib29sIGZpbmlzaCgpOwogCisg
ICAgUmVmPFN0b3JhZ2U+IHN0b3JhZ2U7CisKICAgICBjb25zdCBLZXkga2V5OwogICAgIGNvbnN0
IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgCkBAIC05
OSwxMSArMTAyLDEzIEBAIGJvb2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkKIHN0
cnVjdCBTdG9yYWdlOjpXcml0ZU9wZXJhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgV3JpdGVPcGVyYXRpb24oY29uc3QgUmVjb3JkJiByZWNvcmQsIE1h
cHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCi0gICAgICAgIDogcmVjb3JkKHJl
Y29yZCkKKyAgICBXcml0ZU9wZXJhdGlvbihTdG9yYWdlJiBzdG9yYWdlLCBjb25zdCBSZWNvcmQm
IHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKKyAgICAgICAg
OiBzdG9yYWdlKHN0b3JhZ2UpCisgICAgICAgICwgcmVjb3JkKHJlY29yZCkKICAgICAgICAgLCBt
YXBwZWRCb2R5SGFuZGxlcihXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSkKICAgICB7IH0KLSAg
ICAKKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IFJlY29yZCByZWNvcmQ7
CiAgICAgY29uc3QgTWFwcGVkQm9keUhhbmRsZXIgbWFwcGVkQm9keUhhbmRsZXI7CiAKQEAgLTEx
MywxMSArMTE4LDEzIEBAIHB1YmxpYzoKIHN0cnVjdCBTdG9yYWdlOjpUcmF2ZXJzZU9wZXJhdGlv
biB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHJhdmVyc2VP
cGVyYXRpb24oY29uc3QgU3RyaW5nJiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJz
ZUhhbmRsZXImJiBoYW5kbGVyKQotICAgICAgICA6IHR5cGUodHlwZSkKKyAgICBUcmF2ZXJzZU9w
ZXJhdGlvbihTdG9yYWdlJiBzdG9yYWdlLCBjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxh
Z3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIGhhbmRsZXIpCisgICAgICAgIDogc3RvcmFnZShz
dG9yYWdlKQorICAgICAgICAsIHR5cGUodHlwZSkKICAgICAgICAgLCBmbGFncyhmbGFncykKICAg
ICAgICAgLCBoYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCiAgICAgeyB9CisgICAgUmVmPFN0b3Jh
Z2U+IHN0b3JhZ2U7CiAKICAgICBjb25zdCBTdHJpbmcgdHlwZTsKICAgICBjb25zdCBUcmF2ZXJz
ZUZsYWdzIGZsYWdzOwpAQCAtMTQ5LDcgKzE1Niw3IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVNhbHRG
aWxlUGF0aChjb25zdCBTdHIKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1ha2VWZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwgc2Fs
dEZpbGVOYW1lKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUgbW9kZSkKK1JlZlB0cjxTdG9yYWdlPiBTdG9y
YWdlOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBNb2RlIG1vZGUpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU4LDcgKzE2NSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxTdG9yYWdlPiBTdG9yYWdlOjpvcGVuKGMKICAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtl
U2FsdChtYWtlU2FsdEZpbGVQYXRoKGNhY2hlUGF0aCkpOwogICAgIGlmICghc2FsdCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPihu
ZXcgU3RvcmFnZShjYWNoZVBhdGgsIG1vZGUsICpzYWx0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKIH0KIAogdm9pZCB0cmF2ZXJz
ZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVHlwZSwgY29uc3QgUmVjb3JkRmlsZVRyYXZlcnNlRnVuY3Rpb24mIGZ1bmN0aW9uKQpA
QCAtMjI2LDYgKzIzMywxMiBAQCBTdG9yYWdlOjpTdG9yYWdlKGNvbnN0IFN0cmluZyYgYmFzZURp
cmVjCiAKIFN0b3JhZ2U6On5TdG9yYWdlKCkKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIEFTU0VSVChtX2FjdGl2ZVJlYWRPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
YWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3N5bmNo
cm9uaXphdGlvbkluUHJvZ3Jlc3MpOworICAgIEFTU0VSVCghbV9zaHJpbmtJblByb2dyZXNzKTsK
IH0KIAogU3RyaW5nIFN0b3JhZ2U6OmJhc2VQYXRoKCkgY29uc3QKQEAgLTI1OCw3ICsyNzEsNyBA
QCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9y
YWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzeW5jaHJvbml6aW5nIGNhY2hlIik7CiAKLSAgICBiYWNr
Z3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAgYmFja2dyb3VuZElPUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRl
bnRzRmlsdGVyPigpOwogICAgICAgICBhdXRvIGJsb2JGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PENvbnRlbnRzRmlsdGVyPigpOwogICAgICAgICBzaXplX3QgcmVjb3Jkc1NpemUgPSAwOwpAQCAt
MzA5LDYgKzMyMiw4IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogICAgICAgICBkZWxl
dGVFbXB0eVJlY29yZHNEaXJlY3RvcmllcyhyZWNvcmRzUGF0aCgpKTsKIAogICAgICAgICBMT0co
TmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc3luY2hyb25pemF0
aW9uIGNvbXBsZXRlZCBzaXplPSV6dSBjb3VudD0ldSIsIHJlY29yZHNTaXplLCBjb3VudCk7CisK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKV0geyB9KTsKICAgICB9KTsKIH0KIApAQCAtNTU0LDggKzU2OSw5IEBA
IHZvaWQgU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQogCiAgICAgcmVtb3ZlRnJvbVBl
bmRpbmdXcml0ZU9wZXJhdGlvbnMoa2V5KTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIGtleV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCku
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwga2V5XSAoKSBt
dXRhYmxlIHsKICAgICAgICAgZGVsZXRlRmlsZXMoa2V5KTsKKyAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0geyB9
KTsKICAgICB9KTsKIH0KIApAQCAtNTczLDEyICs1ODksMTQgQEAgdm9pZCBTdG9yYWdlOjpyZW1v
dmUoY29uc3QgVmVjdG9yPEtleT4mIAogICAgICAgICBrZXlzVG9SZW1vdmUudW5jaGVja2VkQXBw
ZW5kKGtleSk7CiAgICAgfQogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRj
aChbdGhpcywga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShrZXlzVG9SZW1vdmUpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICBz
ZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGtleXNUb1JlbW92ZSA9IFdURk1vdmUoa2V5c1RvUmVtb3ZlKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5c1RvUmVtb3ZlKQogICAgICAgICAgICAgZGVs
ZXRlRmlsZXMoa2V5KTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSB7CisgICAgICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAK
QEAgLTgwNSw3ICs4MjMsNyBAQCB2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IEtleSYga2V5
LCB1CiAgICAgaWYgKHJldHJpZXZlRnJvbU1lbW9yeShtX2FjdGl2ZVdyaXRlT3BlcmF0aW9ucywg
a2V5LCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmVh
ZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oa2V5LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxSZWFkT3BlcmF0aW9uPigqdGhpcywga2V5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W3ByaW9yaXR5XS5w
cmVwZW5kKFdURk1vdmUocmVhZE9wZXJhdGlvbikpOwogICAgIGRpc3BhdGNoUGVuZGluZ1JlYWRP
cGVyYXRpb25zKCk7CiB9CkBAIC04MTgsNyArODM2LDcgQEAgdm9pZCBTdG9yYWdlOjpzdG9yZShj
b25zdCBSZWNvcmQmIHJlY29yZAogICAgIGlmICghbV9jYXBhY2l0eSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byB3cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVPcGVy
YXRpb24+KHJlY29yZCwgV1RGTW92ZShtYXBwZWRCb2R5SGFuZGxlcikpOworICAgIGF1dG8gd3Jp
dGVPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdyaXRlT3BlcmF0aW9uPigqdGhpcywgcmVj
b3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSk7CiAgICAgbV9wZW5kaW5nV3JpdGVPcGVy
YXRpb25zLnByZXBlbmQoV1RGTW92ZSh3cml0ZU9wZXJhdGlvbikpOwogCiAgICAgLy8gQWRkIGtl
eSB0byB0aGUgZmlsdGVyIGFscmVhZHkgaGVyZSBhcyB3ZSBkbyBsb29rdXBzIGZyb20gdGhlIHBl
bmRpbmcgb3BlcmF0aW9ucyB0b28uCkBAIC04NDAsNyArODU4LDcgQEAgdm9pZCBTdG9yYWdlOjp0
cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5cAogICAgIEFTU0VSVCh0cmF2ZXJzZUhhbmRsZXIpOwog
ICAgIC8vIEF2b2lkIG5vbi10aHJlYWQgc2FmZSBGdW5jdGlvbiBjb3BpZXMuCiAKLSAgICBhdXRv
IHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2ZXJzZU9wZXJhdGlv
bj4odHlwZSwgZmxhZ3MsIFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKSk7CisgICAgYXV0byB0cmF2
ZXJzZU9wZXJhdGlvblB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8VHJhdmVyc2VPcGVyYXRpb24+KCp0
aGlzLCB0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKICAgICBhdXRvJiB0
cmF2ZXJzZU9wZXJhdGlvbiA9ICp0cmF2ZXJzZU9wZXJhdGlvblB0cjsKICAgICBtX2FjdGl2ZVRy
YXZlcnNlT3BlcmF0aW9ucy5hZGQoV1RGTW92ZSh0cmF2ZXJzZU9wZXJhdGlvblB0cikpOwogCkBA
IC05MzYsNyArOTU0LDcgQEAgdm9pZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUs
IAogICAgICAgICBtX2Jsb2JGaWx0ZXItPmNsZWFyKCk7CiAgICAgbV9hcHByb3hpbWF0ZVJlY29y
ZHNTaXplID0gMDsKIAotICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRTaW5j
ZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHR5
cGUgPSB0eXBlLmlzb2xhdGVkQ29weSgpXSAoKSBtdXRhYmxlIHsKKyAgICBpb1F1ZXVlKCkuZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5j
ZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHR5
cGUgPSB0eXBlLmlzb2xhdGVkQ29weSgpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byByZWNv
cmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7CiAgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0Zp
bGVzKHJlY29yZHNQYXRoLCB0eXBlLCBbbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sIGlzQmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQYXRoKSB7CiAgICAgICAg
ICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJl
Y29yZERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKQEAgLTk1MywxMSArOTcxLDEwIEBAIHZvaWQg
U3RvcmFnZTo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlLCAKICAgICAgICAgLy8gVGhpcyBjbGVh
bnMgdW5yZWZlcmVuY2VkIGJsb2JzLgogICAgICAgICBtX2Jsb2JTdG9yYWdlLnN5bmNocm9uaXpl
KCk7CiAKLSAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5k
bGVyKQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9KTsKIH0KIApAQCAtMTAxOSw3ICsxMDM2
LDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3Jh
Z2UsICIoTmV0d29ya1Byb2Nlc3MpIHNocmlua2luZyBjYWNoZSBhcHByb3hpbWF0ZVNpemU9JXp1
IGNhcGFjaXR5PSV6dSIsIGFwcHJveGltYXRlU2l6ZSgpLCBtX2NhcGFjaXR5KTsKIAotICAgIGJh
Y2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBiYWNrZ3JvdW5kSU9RdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11
dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsK
ICAgICAgICAgU3RyaW5nIGFueVR5cGU7CiAgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJl
Y29yZHNQYXRoLCBhbnlUeXBlLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wgaXNCbG9iLCBjb25z
dCBTdHJpbmcmIHJlY29yZERpcmVjdG9yeVBhdGgpIHsKQEAgLTEwNDMsNyArMTA2MCw3IEBAIHZv
aWQgU3RvcmFnZTo6c2hyaW5rKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIHsKICAgICAgICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAg
ICAgLy8gV2UgY291bGQgc3luY2hyb25pemUgZHVyaW5nIHRoZSBzaHJpbmsgdHJhdmVyc2FsLiBI
b3dldmVyIHRoaXMgaXMgZmFzdCBhbmQgaXQgaXMgYmV0dGVyIHRvIGhhdmUganVzdCBvbmUgY29k
ZSBwYXRoLgogICAgICAgICAgICAgc3luY2hyb25pemUoKTsKQEAgLTEwNTUsNyArMTA3Miw3IEBA
IHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogdm9pZCBTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9u
cygpCiB7Ci0gICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAgIGJh
Y2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gY2FjaGVQYXRoID0gYmFzZVBhdGgo
KTsKICAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBbJmNhY2hlUGF0aF0oY29u
c3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewogICAgICAg
ICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCkBAIC0xMDc5
LDYgKzEwOTYsOCBAQCB2b2lkIFN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKCkKIAogICAgICAg
ICAgICAgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkob2xkVmVyc2lvblBhdGgpOwogICAgICAg
ICB9KTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4
ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBOZXR3b3JrQ2FjaGVTdG9yYWdlX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlU3RvcmFnZV9o
CisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCkBAIC00NSwxMSAr
NDQsMTAgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIElPQ2hhbm5lbDsKIAot
Y2xhc3MgU3RvcmFnZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZSk7CitjbGFz
cyBTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2U+IHsKIHB1Ymxp
YzoKICAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWwsIFRlc3RpbmcgfTsKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1v
ZGUpOworICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZT4gb3Blbihjb25zdCBTdHJpbmcmIGNhY2hl
UGF0aCwgTW9kZSk7CiAKICAgICBzdHJ1Y3QgUmVjb3JkIHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CkBAIC0xOTMsNCArMTkxLDMgQEAgdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxl
cyhjb25zdCBTdHJpbmcmIAogfQogfQogI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0JKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKHBhcmFt
ZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFyYW1l
dGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIpOwogICAgIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNldEFsbG93c0NlbGx1bGFyQWNjZXNzKHBhcmFtZXRlcnMuYWxsb3dzQ2Vs
bHVsYXJBY2Nlc3MpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFVzZXNOZXR3b3JrQ2Fj
aGUocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUpOwogI2lmIFBMQVRGT1JNKElP
UykKICAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5
cGUocGFyYW1ldGVycy5jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOwogI2VuZGlmCkBAIC0x
MDgsNyArMTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgog
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUpIHsK
LSAgICAgICAgICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb24+IGNhY2hl
T3B0aW9uczsKKyAgICAgICAgICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRp
b24+IGNhY2hlT3B0aW9ucyB7IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6UmVnaXN0ZXJO
b3RpZnkgfTsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtD
YWNoZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgICAgICAgICBjYWNoZU9wdGlvbnMgfD0gTmV0
d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpFZmZpY2FjeUxvZ2dpbmc7CiAgICAgICAgICAgICBp
ZiAocGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pCkBAIC0xMTcsNyAr
MTE4LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
UmV2YWxpZGF0aW9uKQogICAgICAgICAgICAgICAgIGNhY2hlT3B0aW9ucyB8PSBOZXR3b3JrQ2Fj
aGU6OkNhY2hlOjpPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uOwogI2VuZGlmCi0gICAg
ICAgICAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0Nh
Y2hlRGlyZWN0b3J5LCBjYWNoZU9wdGlvbnMpKSB7CisgICAgICAgICAgICBtX2NhY2hlID0gTmV0
d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRpb25z
KTsKKworICAgICAgICAgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAvLyBEaXNh
YmxlIE5TVVJMQ2FjaGUuCiAgICAgICAgICAgICAgICAgYXV0byB1cmxDYWNoZShhZG9wdE5TKFtb
TlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTow
IGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRV
UkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg3
LDEzICsxOTEsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOgog
ICAgICAgICBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRl
KCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBhdXRvIGdyb3VwID0gbV9jbGVh
ckNhY2hlRGlzcGF0Y2hHcm91cDsKLSAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQdHI8dm9pZCgpPjo6ZnJvbUNhbGxhYmxlKFtn
cm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LgotICAgICAgICAgICAgY2xl
YXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmdldCgpKTsKKyAgICBpZiAoYXV0byogY2FjaGUg
PSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkgeworICAgICAgICBhdXRvIGdy
b3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKKyAgICAgICAgZGlzcGF0Y2hfZ3JvdXBf
YXN5bmMoZ3JvdXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIEJsb2NrUHRyPHZvaWQoKT46
OmZyb21DYWxsYWJsZShbY2FjaGUsIGdyb3VwLCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGNhY2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LgorICAg
ICAgICAgICAgICAgIGNsZWFyTlNVUkxDYWNoZShncm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmdldCgp
KTsKKyAgICB9CiAjZWxzZQogICAgIGNsZWFyTlNVUkxDYWNoZShtX2NsZWFyQ2FjaGVEaXNwYXRj
aEdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Np
b25Db2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0U291cmNl
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2
b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcm
KTsKICAgICBzdGF0aWMgdm9pZCBzZXRBbGxvd3NDZWxsdWxhckFjY2Vzcyhib29sKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXRVc2VzTmV0d29ya0NhY2hlKGJvb2wpOwogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBzdGF0aWMgdm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3Ry
aW5nJik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDIyMDE5OCkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiRG93bmxvYWQu
aCIKICNpbXBvcnQgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5oIgogI2ltcG9ydCAiTG9n
Z2luZy5oIgotI2ltcG9ydCAiTmV0d29ya0NhY2hlLmgiCiAjaW1wb3J0ICJOZXR3b3JrTG9hZC5o
IgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbXBvcnQgIlNlc3Npb25UcmFja2VyLmgi
CkBAIC00NDksNiArNDQ4LDcgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilz
ZXNzaQogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgCiBzdGF0aWMgYm9vbCBhbGxvd3NDZWxsdWxh
ckFjY2VzcyB7IHRydWUgfTsKK3N0YXRpYyBib29sIHVzZXNOZXR3b3JrQ2FjaGUgeyBmYWxzZSB9
Owogc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlciogbGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtNTIwLDYgKzUyMCwxMSBAQCB2
b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldEFsbG93c0NlbGx1CiAgICAgYWxsb3dzQ2VsbHVs
YXJBY2Nlc3MgPSB2YWx1ZTsKIH0KIAordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRVc2Vz
TmV0d29ya0NhY2hlKGJvb2wgdmFsdWUpCit7CisgICAgdXNlc05ldHdvcmtDYWNoZSA9IHZhbHVl
OworfQorCiAjaWYgUExBVEZPUk0oSU9TKQogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRD
VERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewpAQCAtNTUz
LDEwICs1NTgsMTAgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQog
CiAgICAgaWYgKCFhbGxvd3NDZWxsdWxhckFjY2VzcykKICAgICAgICAgY29uZmlndXJhdGlvbi5h
bGxvd3NDZWxsdWxhckFjY2VzcyA9IE5POwotICAgIAotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLmlzRW5hYmxlZCgpKQorCisgICAgaWYgKHVzZXNOZXR3b3JrQ2FjaGUpCiAgICAg
ICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBuaWw7Ci0gICAgCisKICAgICBpZiAoYXV0byYg
ZGF0YSA9IGdsb2JhbFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoKSkKICAgICAgICAg
Y29uZmlndXJhdGlvbi5fc291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YSA9IChOU0RhdGEg
KilkYXRhLmdldCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9O
ZXR3b3JrUHJvY2Vzc0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQkocmV2aXNpb24gMjIwMTk4KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNo
ZUZvckFsbE9yaQogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNv
dXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNsZWFyKCk7CisgICAgaWYgKG1fY2Fj
aGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAg
U291cE5ldHdvcmtTZXNzaW9uOjpjbGVhck9sZFNvdXBDYWNoZShXZWJDb3JlOjpkaXJlY3RvcnlO
YW1lKG1fZGlza0NhY2hlRGlyZWN0b3J5KSk7CiAKLSAgICBPcHRpb25TZXQ8TmV0d29ya0NhY2hl
OjpDYWNoZTo6T3B0aW9uPiBjYWNoZU9wdGlvbnM7CisgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNo
ZTo6Q2FjaGU6Ok9wdGlvbj4gY2FjaGVPcHRpb25zIHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0
aW9uOjpSZWdpc3Rlck5vdGlmeSB9OwogICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5l
dHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgY2FjaGVPcHRpb25zIHw9IE5ldHdv
cmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6RWZmaWNhY3lMb2dnaW5nOwogI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgICAgIGNhY2hlT3B0
aW9ucyB8PSBOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxpZGF0
aW9uOwogI2VuZGlmCiAKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUo
bV9kaXNrQ2FjaGVEaXJlY3RvcnksIGNhY2hlT3B0aW9ucyk7CisgICAgbV9jYWNoZSA9IE5ldHdv
cmtDYWNoZTo6Q2FjaGU6Om9wZW4obV9kaXNrQ2FjaGVEaXJlY3RvcnksIGNhY2hlT3B0aW9ucyk7
CiAKICAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1w
dHkoKSkgewogICAgICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LApAQCAtMTU4LDcgKzE1OCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JB
bGxPcmkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkICgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCku
Y2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlm
ICghbV9jYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2FjaGUtPmNsZWFyKG1vZGlmaWVk
U2luY2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317236</attachid>
            <date>2017-08-04 05:21:36 -0700</date>
            <delta_ts>2017-08-04 05:45:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-6.patch</filename>
            <type>text/plain</type>
            <size>58981</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyNjIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMDE3LTA4LTA0ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGNhY2hlIHNob3VsZCBi
ZSB1c2FibGUgYXMgbm9uLXNpbmdsZXRvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KKworICAgICAgICBXZSBtaWdodCB3YW50IHRvIHVzZSBpdCBhcyBhIG5vbi1zaW5nbGV0b24g
aW4gdGhlIGZ1dHVyZSAoZm9yIGV4YW1wbGUgYXMgYSBiYWNrZW5kIGZvciB0aGUgY2FjaGUgQVBJ
KS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIE5ldHdvcmtDYWNoZTo6Q2FjaGUgYW5kIE5l
dHdvcmtDYWNoZTo6U3RvcmFnZSByZWZjb3VudGVkIG9iamVjdHMgYW5kIHRha2VzCisgICAgICAg
IGNhcmUgdG8gcmVmIHRoZW0gcHJvcGVybHkgZHVyaW5nIGFzeW5jaHJvbm91cyBvcGVyYXRpb25z
LgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IGFjdHVhbGx5IGNyZWF0ZSBhbnkgbm9uLXNo
YXJlZCBpbnN0YW5jZXMsIGl0IGp1c3QgYWRkcyB0aGUgY2FwYWJpbGl0eS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0b3JlRGVyaXZlZERh
dGFUb0NhY2hlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJL
aXQ6OmNsZWFyRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2FjaGUpOgorCisgICAg
ICAgICAgICBNb3ZlIHRoZSBzaGFyZWQgY2FjaGUgaW5zdGFuY2UgdG8gdGhlIG5ldHdvcmsgcHJv
Y2VzcyBzaW5nbGV0b24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcik6CisKKyAgICAgICAgICAgIEluY2x1ZGUgc2hhcmVkIGNhY2hl
IGFzIGEgcmVmZmVkIG1lbWJlciBmb3Igbm9uLWVwaGVtZXJhbCBpbnN0YW5jZXMuCisKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5Vc2VDYWNoZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDYWNoZUVudHJ5
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlT
dG9yZUFzQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkUmV0cmlldmVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpvcGVu
KToKKworICAgICAgICAgICAgT3BlbiBub3cgcmV0dXJucyBudWxsIGlmIGl0IGZhaWxzLgorICAg
ICAgICAgICAgQWRkIFJlZ2lzdGVyTm90aWZ5IG9wdGlvbiB0byBzZXQgdXAgbm90aWZ5IHRyaWdn
ZXIgZm9yIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpDYWNoZTo6Q2FjaGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
Ojp+Q2FjaGUpOgorCisgICAgICAgICAgICBBZGQgZGVzdHJ1Y3Rvci4KKworICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmR1bXBGaWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6Q2FjaGU6OnNldENhcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6cmV0cmlldmUpOgorCisgICAgICAgICAgICBQcm90ZWN0IHRoZSBjYWNo
ZSBpbnN0YW5jZSBkdXJpbmcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkNhY2hlOjpzdG9yZVJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
YWNoZTo6dHJhdmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpk
dW1wQ29udGVudHNUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnJlY29yZHNQ
YXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6cmV0cmll
dmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6c3RvcmVEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpzaW5nbGV0b24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjppbml0aWFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9k
eURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjppc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorCisgICAgICAgICAgICBSZW1vdmUgaXNFbmFibGVkKCkg
c3RhdGUgYXMgYSBjYWNoZSBvYmplY3Qgbm93IGFsd2F5cyByZXByZXNlbnRzIGFuIGVuYWJsZWQg
Y2FjaGUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxpemVT
aGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3JkIGNvbnN0KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6d2lsbFNlbmRS
ZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3Vs
YXRpdmVMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OlJlYWRPcGVy
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OldyaXRlT3Bl
cmF0aW9uOjpXcml0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3RvcmFnZTo6VHJhdmVyc2VPcGVyYXRpb246OlRyYXZlcnNlT3BlcmF0aW9uKToKKworICAgICAg
ICAgICAgT3BlcmF0aW9ucyBub3cgcmVmIHRoZSBzdG9yYWdlLiBUaGV5IGFyZSBhbHJlYWR5IGRl
bGV0ZWQgaW4gdGhlIG1haW4gdGhyZWFkIHNvCisgICAgICAgICAgICBwcm9wZXIgZGVzdHJ1Y3Rp
b24gaXMgdGFrZW4gY2FyZSBvZi4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0
b3JhZ2U6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6On5T
dG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzeW5jaHJv
bml6ZSk6CisKKyAgICAgICAgICAgIFRoaXMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBtZXRob2Rz
IG5vdyBwcm90ZWN0IHRoZSBTdG9yYWdlIGluc3RhbmNlLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
U3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6
OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpjbGVh
cik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6c2hyaW5rKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9ucyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyRGlz
a0NhY2hlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vz
c2lvbkNvY29hKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpj
bGVhckRpc2tDYWNoZSk6CisKIDIwMTctMDgtMDQgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mg
dXNlcyB0aGUgd3JvbmcgZml4ZWQgcG9zaXRpb24gcmVjdGFuZ2xlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwOSw3ICs0MDksOCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Ojp3cml0CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0b3JlRGVyaXZl
ZERhdGFUb0NhY2hlKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhS2V5JiBkYXRhS2V5
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCiB7Ci0gICAgTmV0d29ya0NhY2hlOjpz
aW5nbGV0b24oKS5zdG9yZURhdGEoZGF0YUtleSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
KyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUo
KSkKKyAgICAgICAgY2FjaGUtPnN0b3JlRGF0YShkYXRhS2V5LCBkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDYXB0
dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZp
c2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDkgKzMyOCw5IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnVwZGF0ZUNvb2tpZVBhcnRpdGkKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50
cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlv
bj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5
Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0g
ICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICBpZiAo
YXV0byogY2FjaGUgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkgewogICAg
ICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Q+IG9yaWdpbnNBbmRTaXpl
czsKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbZmV0Y2hPcHRp
b25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmln
aW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8qIHRyYXZlcnNhbEVu
dHJ5KSBtdXRhYmxlIHsKKyAgICAgICAgY2FjaGUtPnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRT
aXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11
dGFibGUgewogICAgICAgICAgICAgaWYgKCF0cmF2ZXJzYWxFbnRyeSkgewogICAgICAgICAgICAg
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7CiAKQEAgLTQzNiwyMCArNDM2
LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFMKIHN0YXRpYyB2
b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRh
PiYgb3JpZ2lucywgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5pc0VuYWJsZWQoKSkgeworICAgIGlmIChhdXRvKiBjYWNoZSA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5jYWNoZSgpKSB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPj4gb3JpZ2luc1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdp
bnMpCiAgICAgICAgICAgICBvcmlnaW5zVG9EZWxldGUuYWRkKG9yaWdpbi5zZWN1cml0eU9yaWdp
bigpKTsKIAogICAgICAgICBWZWN0b3I8TmV0d29ya0NhY2hlOjpLZXk+IGNhY2hlS2V5c1RvRGVs
ZXRlOwotICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnRyYXZlcnNlKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zVG9EZWxldGUg
PSBXVEZNb3ZlKG9yaWdpbnNUb0RlbGV0ZSksIGNhY2hlS2V5c1RvRGVsZXRlID0gV1RGTW92ZShj
YWNoZUtleXNUb0RlbGV0ZSldKGF1dG8qIHRyYXZlcnNhbEVudHJ5KSBtdXRhYmxlIHsKKyAgICAg
ICAgY2FjaGUtPnRyYXZlcnNlKFtjYWNoZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRlID0gV1RGTW92ZShvcmlnaW5zVG9EZWxl
dGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUoY2FjaGVLZXlzVG9EZWxldGUpXShhdXRv
KiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAodHJhdmVyc2FsRW50
cnkpIHsKICAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLmNvbnRhaW5zKFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUodHJhdmVyc2FsRW50cnktPmVudHJ5LnJlc3BvbnNlKCkudXJsKCkp
KSkKICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlzVG9EZWxldGUuYXBwZW5kKHRyYXZlcnNh
bEVudHJ5LT5lbnRyeS5rZXkoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShjYWNo
ZUtleXNUb0RlbGV0ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAg
Y2FjaGUtPnJlbW92ZShjYWNoZUtleXNUb0RlbGV0ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9KTsKIApAQCAtNTc1LDkgKzU3NSw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwodWludDMKICAgICAgICAgdXJs
Q2FjaGVEaXNrQ2FwYWNpdHkgPSBtX2Rpc2tDYWNoZVNpemVPdmVycmlkZTsKIAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQotICAgIGF1dG8mIG5ldHdvcmtDYWNoZSA9IE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKG5ldHdvcmtDYWNoZS5pc0VuYWJsZWQoKSkgewotICAgICAg
ICBuZXR3b3JrQ2FjaGUuc2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworICAgIGlm
IChtX2NhY2hlKSB7CisgICAgICAgIG1fY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hlRGlza0Nh
cGFjaXR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjIwMTk4
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMCBAQCBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZTsK
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczsKIAorbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CitjbGFzcyBD
YWNoZTsKK30KKwogY2xhc3MgTmV0d29ya1Byb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBw
cml2YXRlIERvd25sb2FkTWFuYWdlcjo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShOZXR3b3JrUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPE5ldHdv
cmtQcm9jZXNzPjsKQEAgLTg2LDYgKzkwLDkgQEAgcHVibGljOgogCiAgICAgQXV0aGVudGljYXRp
b25NYW5hZ2VyJiBhdXRoZW50aWNhdGlvbk1hbmFnZXIoKTsKICAgICBEb3dubG9hZE1hbmFnZXIm
IGRvd25sb2FkTWFuYWdlcigpOworCisgICAgTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUoKSB7
IHJldHVybiBtX2NhY2hlLmdldCgpOyB9CisKICAgICBib29sIGNhbkhhbmRsZUhUVFBTU2VydmVy
VHJ1c3RFdmFsdWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbjsgfQogCiAgICAgdm9pZCBwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
KGJvb2wmIGhhbmRsZWQpOwpAQCAtMjIwLDYgKzIyNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOwogICAgIFNlY29uZHMgbV9sb2Fk
VGhyb3R0bGVMYXRlbmN5OwogCisgICAgUmVmUHRyPE5ldHdvcmtDYWNoZTo6Q2FjaGU+IG1fY2Fj
aGU7CisKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gTmV0d29ya1By
b2Nlc3NTdXBwbGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcCBtX3N1
cHBsZW1lbnRzOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3Jr
UmVzb3VyY2VMbwogICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX2RlZmVy
c0xvYWRpbmcocGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQogICAgICwgbV9idWZmZXJpbmdUaW1l
cigqdGhpcywgJk5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCkKKyAg
ICAsIG1fY2FjaGUoc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSA/IG51bGxwdHIgOiBOZXR3b3Jr
UHJvY2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBl
eGlzdGVuY2Ugb2YgRW1wdHlGcmFtZUxvYWRlckNsaWVudCBpbiBXZWJDb3JlLgpAQCAtMTIxLDEw
ICsxMjIsMTAgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVz
ZUNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKIHsKLSAgICBpZiAo
IU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKKyAgICBpZiAoIW1fY2Fj
aGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIXNlc3Npb25JRCgpLmlzRXBo
ZW1lcmFsKCkpOworCiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5j
YWNoZVBvbGljeSgpID09IFdlYkNvcmU6OkRvTm90VXNlQW55Q2FjaGUpCkBAIC0xODEsNyArMTgy
LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2FjaAogICAgIEFTU0VS
VChjYW5Vc2VDYWNoZShyZXF1ZXN0KSk7CiAKICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9h
ZGVyPiBsb2FkZXIodGhpcyk7Ci0gICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZXRyaWV2
ZShyZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFt
ZUlEIH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3ZlKGxvYWRlciksIHJlcXVlc3RdKGF1dG8gZW50
cnkpIHsKKyAgICBtX2NhY2hlLT5yZXRyaWV2ZShyZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQ
YWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlEIH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3Zl
KGxvYWRlciksIHJlcXVlc3RdKGF1dG8gZW50cnkpIHsKICAgICAgICAgaWYgKGxvYWRlci0+aGFz
T25lUmVmKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBsb2FkZXIgaGFzIGJlZW4gYWJvcnRlZCBh
bmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5IHRoaXMgbGFtYmRhLgogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzA3LDcgKzMwOCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgp
CiAgICAgICAgIGlmIChjYW5Vc2VDYWNoZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVzdCgp
KSkgewogICAgICAgICAgICAgLy8gV2UgbWlnaHQgYWxyZWFkeSBoYXZlIHVzZWQgZGF0YSBmcm9t
IHRoaXMgaW5jb21wbGV0ZSBsb2FkLiBFbnN1cmUgb2xkZXIgdmVyc2lvbnMgZG9uJ3QgcmVtYWlu
IGluIHRoZSBjYWNoZSBhZnRlciBjYW5jZWwuCiAgICAgICAgICAgICBpZiAoIW1fcmVzcG9uc2Uu
aXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1v
dmUobV9uZXR3b3JrTG9hZC0+Y3VycmVudFJlcXVlc3QoKSk7CisgICAgICAgICAgICAgICAgbV9j
YWNoZS0+cmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOwogICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2FuY2VsKCk7CkBAIC0zMzQsNyArMzM1
LDcgQEAgYXV0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZQogICAgIGlmICht
X2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSB7CiAgICAgICAgIGJvb2wgdmFsaWRhdGlvblN1Y2Nl
ZWRlZCA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9k
aWZpZWQKICAgICAgICAgaWYgKHZhbGlkYXRpb25TdWNjZWVkZWQpIHsKLSAgICAgICAgICAgIG1f
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0
ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRl
cnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7
CisgICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbV9jYWNoZS0+dXBkYXRl
KG9yaWdpbmFsUmVxdWVzdCgpLCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVy
cy53ZWJGcmFtZUlEIH0sICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsK
ICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHdhcyBjb25kaXRpb25hbCB0aGVuIHRoaXMg
cmV2YWxpZGF0aW9uIHdhcyBub3QgdHJpZ2dlcmVkIGJ5IHRoZSBuZXR3b3JrIGNhY2hlIGFuZCB3
ZSBwYXNzIHRoZSAzMDQgcmVzcG9uc2UgdG8gV2ViQ29yZS4KICAgICAgICAgICAgIGlmIChvcmln
aW5hbFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCiAgICAgICAgICAgICAgICAgbV9jYWNoZUVu
dHJ5Rm9yVmFsaWRhdGlvbiA9IG51bGxwdHI7CkBAIC00NzAsNyArNDcxLDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVkaQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgaWYgKGNhblVzZUNhY2hlZFJlZGlyZWN0KHJlcXVlc3QpKQotICAgICAgICBOZXR3
b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKKyAgICAgICAgbV9jYWNoZS0+c3RvcmVSZWRpcmVjdChy
ZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCByZWRpcmVjdFJlcXVlc3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocmVxdWVzdCk7CiAjZW5kaWYKQEAgLTU1OSw3ICs1NjAsNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5U3RvcmVBc0NhCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLnN0b3JlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdU
Rk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0o
YXV0byYgbWFwcGVkQm9keSkgbXV0YWJsZSB7CisgICAgbV9jYWNoZS0+c3RvcmUobV9uZXR3b3Jr
TG9hZC0+Y3VycmVudFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGTW92ZShtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKSwgW2xvYWRlciA9IG1ha2VSZWYoKnRoaXMpXShhdXRvJiBtYXBwZWRCb2R5KSBt
dXRhYmxlIHsKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICBpZiAobWFw
cGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTU4OCw3ICs1ODksNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
UmV0cmlldmVDCiAKICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogbV9wYXJhbWV0ZXJzLmRlcml2
ZWRDYWNoZWREYXRhVHlwZXNUb1JldHJpZXZlKSB7CiAgICAgICAgICAgICBOZXR3b3JrQ2FjaGU6
OkRhdGFLZXkga2V5IHsgb3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKSwgdHlwZSwg
Ym9keUhhc2ggfTsKLSAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmll
dmVEYXRhKGtleSwgW2xvYWRlciA9IG1ha2VSZWYoKnRoaXMpLCBlbnRyeVB0ciwgdHlwZSwgcmV0
cmlldmVDb3VudF0gKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIG1fY2FjaGUtPnJldHJpZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVm
KCp0aGlzKSwgZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgbG9hZGVyLT5tX3Jl
dHJpZXZlZERlcml2ZWREYXRhQ291bnQrKzsKICAgICAgICAgICAgICAgICBib29sIHJldHJpZXZl
ZEFsbCA9IGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50ID09IHJldHJpZXZlQ291
bnQ7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+
IGVudHJ5KHJldHJpZXZlZEFsbCA/IGVudHJ5UHRyIDogbnVsbHB0cik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJ
KHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsNyBAQCBwcml2
YXRlOgogCiAgICAgV2ViQ29yZTo6VGltZXIgbV9idWZmZXJpbmdUaW1lcjsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKyAgICBSZWZQdHI8TmV0d29ya0NhY2hlOjpDYWNoZT4gbV9jYWNoZTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcmVkRGF0YUZvckNhY2hl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBtX2NhY2hlRW50cnlG
b3JWYWxpZGF0aW9uOwogICAgIGJvb2wgbV9pc1dhaXRpbmdDb250aW51ZVdpbGxTZW5kUmVxdWVz
dEZvckNhY2hlZFJlZGlyZWN0IHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDIyMDE5
OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDEwICs2MiwxNiBAQCBzdGF0aWMgY29uc3QgQXRvbWlj
U3RyaW5nJiByZXNvdXJjZVR5cGUoCiAgICAgcmV0dXJuIHJlc291cmNlOwogfQogCi1DYWNoZSYg
c2luZ2xldG9uKCkKK1JlZlB0cjxDYWNoZT4gQ2FjaGU6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNo
ZVBhdGgsIE9wdGlvblNldDxPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPENhY2hlPiBpbnN0YW5jZTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byBz
dG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9u
OjpUZXN0aW5nTW9kZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6
Tm9ybWFsKTsKKworICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5l
ZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFzdG9yYWdlKTsKKworICAgIGlmICghc3Rv
cmFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDYWNoZShzdG9yYWdlLnJlbGVhc2VOb25OdWxsKCksIG9wdGlvbnMpKTsKIH0KIAogI2lmIFBM
QVRGT1JNKEdUSykKQEAgLTc1LDEwICs4MSw5IEBAIHN0YXRpYyB2b2lkIGR1bXBGaWxlQ2hhbmdl
ZChDYWNoZSogY2FjaGUKIH0KICNlbmRpZgogCi1ib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKQorQ2FjaGU6OkNh
Y2hlKFJlZjxTdG9yYWdlPiYmIHN0b3JhZ2UsIE9wdGlvblNldDxPcHRpb24+IG9wdGlvbnMpCisg
ICAgOiBtX3N0b3JhZ2UoV1RGTW92ZShzdG9yYWdlKSkKIHsKLSAgICBtX3N0b3JhZ2UgPSBTdG9y
YWdlOjpvcGVuKGNhY2hlUGF0aCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlRlc3RpbmdNb2Rl
KSA/IFN0b3JhZ2U6Ok1vZGU6OlRlc3RpbmcgOiBTdG9yYWdlOjpNb2RlOjpOb3JtYWwpOwotCiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIGlm
IChvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24pKSB7CiAg
ICAgICAgIG1fbG93UG93ZXJNb2RlTm90aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6
Okxvd1Bvd2VyTW9kZU5vdGlmaWVyPihbdGhpc10oYm9vbCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQp
IHsKQEAgLTg3LDQ0ICs5Miw0MSBAQCBib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYgY2FjCiAgICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyKTsKLSAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KCptX3N0b3JhZ2Up
OworICAgICAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKnRoaXMsIG1fc3RvcmFnZS5nZXQoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoIW1fbG93UG93ZXJNb2RlTm90
aWZpZXItPmlzTG93UG93ZXJNb2RlRW5hYmxlZCgpKQotICAgICAgICAgICAgbV9zcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPigq
bV9zdG9yYWdlKTsKKyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6
bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKnRoaXMsIG1fc3RvcmFnZS5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OkVm
ZmljYWN5TG9nZ2luZykpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4o
Y2FjaGVQYXRoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6b3BlbigqdGhp
cywgbV9zdG9yYWdlLT5iYXNlUGF0aCgpKTsKIAorICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKE9w
dGlvbjo6UmVnaXN0ZXJOb3RpZnkpKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gVHJp
Z2dlcnMgd2l0aCAibm90aWZ5dXRpbCAtcCBjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLgot
ICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgLy8gVHJpZ2dlcnMgd2l0aCAibm90aWZ5dXRp
bCAtcCBjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLgogICAgICAgICBpbnQgdG9rZW47CiAg
ICAgICAgIG5vdGlmeV9yZWdpc3Rlcl9kaXNwYXRjaCgiY29tLmFwcGxlLldlYktpdC5DYWNoZS5k
dW1wIiwgJnRva2VuLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKGludCkgewogICAgICAg
ICAgICAgZHVtcENvbnRlbnRzVG9GaWxlKCk7CiAgICAgICAgIH0pOwotICAgIH0KICNlbmRpZgog
I2lmIFBMQVRGT1JNKEdUSykKLSAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAkY2FjaGVQYXRo
L2R1bXAiLgotICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgLy8gVHJpZ2dlcnMgd2l0aCAi
dG91Y2ggJGNhY2hlUGF0aC9kdW1wIi4KICAgICAgICAgQ1N0cmluZyBkdW1wRmlsZVBhdGggPSBX
ZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1bXAiKSk7CiAgICAgICAgIEdSZWZQ
dHI8R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZHVtcEZp
bGVQYXRoLmRhdGEoKSkpOwogICAgICAgICBHRmlsZU1vbml0b3IqIG1vbml0b3IgPSBnX2ZpbGVf
bW9uaXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVfTU9OSVRPUl9OT05FLCBudWxscHRy
LCBudWxscHRyKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1vbml0b3IsICJj
aGFuZ2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9CiAjZW5k
aWYKKyAgICB9Cit9CiAKLSAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBv
cGVuZWQgY2FjaGUgc3RvcmFnZSwgc3VjY2VzcyAlZCIsICEhbV9zdG9yYWdlKTsKLSAgICByZXR1
cm4gISFtX3N0b3JhZ2U7CitDYWNoZTo6fkNhY2hlKCkKK3sKIH0KIAogdm9pZCBDYWNoZTo6c2V0
Q2FwYWNpdHkoc2l6ZV90IG1heGltdW1TaXplKQogewotICAgIGlmICghbV9zdG9yYWdlKQotICAg
ICAgICByZXR1cm47CiAgICAgbV9zdG9yYWdlLT5zZXRDYXBhY2l0eShtYXhpbXVtU2l6ZSk7CiB9
CiAKQEAgLTMxNSw3ICszMTcsNiBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNp
c2lvbihjCiAKIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgRnVuY3Rpb248dm9p
ZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
QVNTRVJUKGlzRW5hYmxlZCgpKTsKICAgICBBU1NFUlQocmVxdWVzdC51cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpOwogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgcmV0cmlldmluZyAlcyBwcmlvcml0eSAlZCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlvcml0eSgpKSk7CkBAIC0z
NTUsNyArMzU2LDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwog
ICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAg
ICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXF1ZXN0LnByaW9yaXR5
KCkpOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3Ro
aXMsIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNvcmQpIHsKKyAgICBt
X3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1lSURdKGF1
dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBMT0coTmV0
d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOwogCkBA
IC00MDgsNyArNDA5LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6bWFrZVJlZGly
ZQogCiBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwg
RnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKHJlc3BvbnNlRGF0YSk7CiAKICAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdG9yaW5nICVzLCBwYXJ0aXRpb24g
JXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgbWFrZUNhY2hlS2V5
KHJlcXVlc3QpLnBhcnRpdGlvbigpLmxhdGluMSgpLmRhdGEoKSk7CkBAIC00MzMsNyArNDMzLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29ucwogICAgIGF1dG8gY2Fj
aGVFbnRyeSA9IG1ha2VFbnRyeShyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZURh
dGEpKTsKICAgICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnktPmVuY29kZUFzU3RvcmFnZVJlY29y
ZCgpOwogCi0gICAgbV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIFt0aGlzLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShjb25zdCBEYXRhJiBib2R5RGF0YSkg
eworICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShjb25zdCBEYXRhJiBib2R5RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJv
ZHk7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKICAgICAgICAgaWYgKGNhblVzZVNo
YXJlZE1lbW9yeUZvckJvZHlEYXRhKCkpIHsKQEAgLTQ1Myw4ICs0NTMsNiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zCiAKIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4g
Q2FjaGU6OnN0b3JlUmVkaXJlY3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKGlz
RW5hYmxlZCgpKTsKLQogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0
b3JpbmcgcmVkaXJlY3QgJXMgLT4gJXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgp
LmRhdGEoKSwgcmVkaXJlY3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7
CiAKICAgICBTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24gPSBtYWtlU3RvcmVEZWNpc2lvbihy
ZXF1ZXN0LCByZXNwb25zZSwgMCk7CkBAIC00OTUsOCArNDkzLDYgQEAgc3RkOjp1bmlxdWVfcHRy
PEVudHJ5PiBDYWNoZTo6dXBkYXRlKGNvbgogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgS2V5
JiBrZXkpCiB7Ci0gICAgQVNTRVJUKGlzRW5hYmxlZCgpKTsKLQogICAgIG1fc3RvcmFnZS0+cmVt
b3ZlKGtleSk7CiB9CiAKQEAgLTUwNywxNSArNTAzLDExIEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShj
b25zdCBXZWJDb3JlOjpSZXNvdXIKIAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IFZlY3RvcjxL
ZXk+JiBrZXlzLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0KICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXlzLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGU6OnRyYXZlcnNlKEZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFRyYXZlcnNhbEVudHJ5Kik+JiYgdHJhdmVyc2VIYW5kbGVyKQogewot
ICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0KICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY2xpZW50
cyBtYWtpbmcgZXhjZXNzaXZlIHRyYXZlcnNhbCByZXF1ZXN0cy4KICAgICBjb25zdCB1bnNpZ25l
ZCBtYXhpbXVtVHJhdmVyc2VDb3VudCA9IDM7CiAgICAgaWYgKG1fdHJhdmVyc2VDb3VudCA+PSBt
YXhpbXVtVHJhdmVyc2VDb3VudCkgewpAQCAtNTI5LDcgKzUyMSw3IEBAIHZvaWQgQ2FjaGU6OnRy
YXZlcnNlKEZ1bmN0aW9uPHZvaWQgKGNvbnMKIAogICAgICsrbV90cmF2ZXJzZUNvdW50OwogCi0g
ICAgbV9zdG9yYWdlLT50cmF2ZXJzZShyZXNvdXJjZVR5cGUoKSwgMCwgW3RoaXMsIHRyYXZlcnNl
SGFuZGxlciA9IFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKV0oY29uc3QgU3RvcmFnZTo6UmVjb3Jk
KiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8mIHJlY29yZEluZm8pIHsKKyAgICBt
X3N0b3JhZ2UtPnRyYXZlcnNlKHJlc291cmNlVHlwZSgpLCAwLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCB0cmF2ZXJzZUhhbmRsZXIgPSBXVEZNb3ZlKHRyYXZlcnNlSGFu
ZGxlcildKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNv
cmRJbmZvJiByZWNvcmRJbmZvKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAg
ICAtLW1fdHJhdmVyc2VDb3VudDsKICAgICAgICAgICAgIHRyYXZlcnNlSGFuZGxlcihudWxscHRy
KTsKQEAgLTU1Miw4ICs1NDQsNiBAQCBTdHJpbmcgQ2FjaGU6OmR1bXBGaWxlUGF0aCgpIGNvbnN0
CiAKIHZvaWQgQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0b3Jh
Z2UpCi0gICAgICAgIHJldHVybjsKICAgICBhdXRvIGZkID0gV2ViQ29yZTo6b3BlbkZpbGUoZHVt
cEZpbGVQYXRoKCksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKCFXZWJDb3JlOjpp
c0hhbmRsZVZhbGlkKGZkKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjIwLDEwICs2MTAsNiBAQCB2
b2lkIENhY2hlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2NsCiAgICAgaWYgKG1fc3RhdGlz
dGljcykKICAgICAgICAgbV9zdGF0aXN0aWNzLT5jbGVhcigpOwogCi0gICAgaWYgKCFtX3N0b3Jh
Z2UpIHsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBTdHJpbmcgYW55VHlwZTsK
ICAgICBtX3N0b3JhZ2UtPmNsZWFyKGFueVR5cGUsIG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIApAQCAtNjM3LDEzICs2MjMsMTEgQEAgdm9pZCBDYWNoZTo6Y2xl
YXIoKQogCiBTdHJpbmcgQ2FjaGU6OnJlY29yZHNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zdG9yYWdlID8gbV9zdG9yYWdlLT5yZWNvcmRzUGF0aCgpIDogU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fc3RvcmFnZS0+cmVjb3Jkc1BhdGgoKTsKIH0KIAogdm9pZCBDYWNoZTo6cmV0cmlldmVE
YXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKGlz
RW5hYmxlZCgpKTsKLQogICAgIEtleSBrZXkgeyBkYXRhS2V5LCBtX3N0b3JhZ2UtPnNhbHQoKSB9
OwogICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICgh
cmVjb3JkIHx8ICFyZWNvcmQtPmJvZHkuc2l6ZSgpKSB7CkBAIC02NTcsOCArNjQxLDYgQEAgdm9p
ZCBDYWNoZTo6cmV0cmlldmVEYXRhKGNvbnN0IERhdGFLZXkmIAogCiB2b2lkIENhY2hlOjpzdG9y
ZURhdGEoY29uc3QgRGF0YUtleSYgZGF0YUtleSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2UpCi0gICAgICAgIHJldHVybjsKICAgICBLZXkg
a2V5IHsgZGF0YUtleSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKICAgICBTdG9yYWdlOjpSZWNvcmQg
cmVjb3JkIHsga2V5LCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSwgeyB9LCBEYXRh
IHsgZGF0YSwgc2l6ZSB9LCB7IH0gfTsKICAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgeyB9
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5l
dHdvcmtDYWNoZV9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZV9oCisjcHJhZ21hIG9uY2UKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCkBAIC01MCw4ICs0OSw2IEBAIGNsYXNzIENhY2hlOwog
Y2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjsKIGNsYXNzIFN0YXRpc3RpY3M7CiAKLUNhY2hl
JiBzaW5nbGV0b24oKTsKLQogc3RydWN0IE1hcHBlZEJvZHkgewogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNv
dXJjZTsKQEAgLTkxLDIyICs4OCwyMCBAQCBlbnVtIGNsYXNzIFVzZURlY2lzaW9uIHsKIAogdXNp
bmcgR2xvYmFsRnJhbWVJRCA9IHN0ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50
NjRfdCAvKndlYkZyYW1lSUQqLz47CiAKLWNsYXNzIENhY2hlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDYWNoZSk7Ci0gICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q2Fj
aGU+OworY2xhc3MgQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZT4gewogcHVibGljOgog
ICAgIGVudW0gY2xhc3MgT3B0aW9uIHsKICAgICAgICAgRWZmaWNhY3lMb2dnaW5nID0gMSA8PCAw
LAogICAgICAgICAvLyBJbiB0ZXN0aW5nIG1vZGUgd2UgdHJ5IHRvIGVsaW1pbmF0ZSBzb3VyY2Vz
IG9mIHJhbmRvbW5lc3MuIENhY2hlIGRvZXMgbm90IHNocmluayBhbmQgdGhlcmUgYXJlIG5vIHJl
YWQgdGltZW91dHMuCiAgICAgICAgIFRlc3RpbmdNb2RlID0gMSA8PCAxLAorICAgICAgICBSZWdp
c3Rlck5vdGlmeSA9IDEgPDwgMiwKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04pCi0gICAgICAgIFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uID0gMSA8PCAy
LAorICAgICAgICBTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IDEgPDwgMywKICNlbmRpZgogICAg
IH07Ci0gICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBPcHRpb25T
ZXQ8T3B0aW9uPik7Ci0gICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOworICAgIHN0YXRpYyBS
ZWZQdHI8Q2FjaGU+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE9wdGlvblNldDxPcHRp
b24+KTsKIAotICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gISFtX3N0b3JhZ2U7
IH0KKyAgICB2b2lkIHNldENhcGFjaXR5KHNpemVfdCk7CiAKICAgICAvLyBDb21wbGV0aW9uIGhh
bmRsZXIgbWF5IGdldCBjYWxsZWQgYmFjayBzeW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCiAgICAg
dm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9i
YWxGcmFtZUlEJiwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+JiYpOwpA
QCAtMTM1LDIyICsxMzAsMjQgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcENvbnRlbnRzVG9GaWxl
KCk7CiAKICAgICBTdHJpbmcgcmVjb3Jkc1BhdGgoKSBjb25zdDsKLSAgICBib29sIGNhblVzZVNo
YXJlZE1lbW9yeUZvckJvZHlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlICYmIG1fc3Rv
cmFnZS0+Y2FuVXNlU2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKTsgfQorICAgIGJvb2wgY2FuVXNl
U2hhcmVkTWVtb3J5Rm9yQm9keURhdGEoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPmNhblVz
ZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRhKCk7IH0KIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
X1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAgICBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKiBz
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKCkgeyByZXR1cm4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmdldCgpOyB9CiAjZW5kaWYKIAorICAgIH5DYWNoZSgpOworCiBwcml2YXRlOgotICAgIENhY2hl
KCkgPSBkZWZhdWx0OwotICAgIH5DYWNoZSgpID0gZGVsZXRlOworICAgIENhY2hlKFJlZjxTdG9y
YWdlPiYmLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKTsKIAogICAgIEtleSBtYWtlQ2FjaGVL
ZXkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBTdHJpbmcgZHVtcEZp
bGVQYXRoKCkgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVEdW1wRmlsZSgpOwogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBSZWY8U3RvcmFnZT4gbV9zdG9yYWdl
OworCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpMb3dQb3dlck1vZGVOb3RpZmllcj4gbV9sb3dQ
b3dlck1vZGVOb3RpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVMb2FkTWFu
YWdlcj4gbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOwpAQCAtMTYzLDQgKzE2MCwzIEBAIHByaXZh
dGU6CiB9CiB9CiAjZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9u
IDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgpAQCAtMTQ2LDcgKzE0Nyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4g
RW50cnk6OmRlY29kZVN0b3IKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogdm9pZCBF
bnRyeTo6aW5pdGlhbGl6ZVNoYXJlYWJsZVJlc291cmNlSGFuZGxlRnJvbVN0b3JhZ2VSZWNvcmQo
KSBjb25zdAogewotICAgIGlmICghTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5jYW5Vc2VTaGFy
ZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQorICAgIGF1dG8qIGNhY2hlID0gTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLmNhY2hlKCk7CisgICAgaWYgKCFjYWNoZSB8fCAhY2FjaGUtPmNhblVzZVNo
YXJlZE1lbW9yeUZvckJvZHlEYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc2hh
cmVkTWVtb3J5ID0gbV9zb3VyY2VTdG9yYWdlUmVjb3JkLmJvZHkudHJ5Q3JlYXRlU2hhcmVkTWVt
b3J5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCShyZXZpc2lv
biAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDkgQEAg
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1T
cGVjdWxhdGl2ZUxvYWQ6OlNwZWN1bGF0aXZlTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFt
ZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGU6OkVudHJ5PiBjYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgUmV2YWxpZGF0aW9uQ29t
cGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKLSAgICA6IG1fZnJhbWVJRChmcmFt
ZUlEKQorU3BlY3VsYXRpdmVMb2FkOjpTcGVjdWxhdGl2ZUxvYWQoQ2FjaGUmIGNhY2hlLCBjb25z
dCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBjYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiwgUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
KyAgICA6IG1fY2FjaGUoY2FjaGUpCisgICAgLCBtX2ZyYW1lSUQoZnJhbWVJRCkKICAgICAsIG1f
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgLCBtX29y
aWdpbmFsUmVxdWVzdChyZXF1ZXN0KQogICAgICwgbV9idWZmZXJlZERhdGFGb3JDYWNoZShTaGFy
ZWRCdWZmZXI6OmNyZWF0ZSgpKQpAQCAtNzEsMTAgKzcyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVM
b2FkOjp3aWxsU2VuZFJlZGlyZWN0ZWQKIHsKICAgICBMT0coTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVQcmVsb2FkaW5nLCAiU3BlY3VsYXRpdmUgcmVkaXJlY3QgJXMgLT4gJXMiLCByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZGlyZWN0UmVxdWVzdC51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAotICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuc3RvcmVSZWRpcmVjdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCByZWRpcmVj
dFJlcXVlc3QpOworICAgIG1fY2FjaGVFbnRyeSA9IG1fY2FjaGUtPnN0b3JlUmVkaXJlY3QocmVx
dWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICAvLyBDcmVhdGUg
YSBzeW50aGV0aWMgY2FjaGUgZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAgaWYgKCFtX2Nh
Y2hlRW50cnkpCi0gICAgICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkubWFrZVJlZGlyZWN0RW50cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RS
ZXF1ZXN0KTsKKyAgICAgICAgbV9jYWNoZUVudHJ5ID0gbV9jYWNoZS0+bWFrZVJlZGlyZWN0RW50
cnkocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKIAogICAgIC8v
IERvbid0IGZvbGxvdyB0aGUgcmVkaXJlY3QuIFRoZSByZWRpcmVjdCB0YXJnZXQgd2lsbCBiZSBy
ZWdpc3RlcmVkIGZvciBzcGVjdWxhdGl2ZSBsb2FkIHdoZW4gaXQgaXMgbG9hZGVkLgogICAgIGRp
ZENvbXBsZXRlKCk7CkBAIC04OSw3ICs5MCw3IEBAIGF1dG8gU3BlY3VsYXRpdmVMb2FkOjpkaWRS
ZWNlaXZlUmVzcG9uc2UKIAogICAgIGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1fcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKICAgICBpZiAo
dmFsaWRhdGlvblN1Y2NlZWRlZCAmJiBtX2NhY2hlRW50cnkpCi0gICAgICAgIG1fY2FjaGVFbnRy
eSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG1fb3JpZ2luYWxSZXF1ZXN0LCBt
X2ZyYW1lSUQsICptX2NhY2hlRW50cnksIG1fcmVzcG9uc2UpOworICAgICAgICBtX2NhY2hlRW50
cnkgPSBtX2NhY2hlLT51cGRhdGUobV9vcmlnaW5hbFJlcXVlc3QsIG1fZnJhbWVJRCwgKm1fY2Fj
aGVFbnRyeSwgbV9yZXNwb25zZSk7CiAgICAgZWxzZQogICAgICAgICBtX2NhY2hlRW50cnkgPSBu
dWxscHRyOwogCkBAIC0xMTUsMTAgKzExNiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZDo6ZGlk
RmluaXNoTG9hZGluZyhjCiAgICAgaWYgKG1fZGlkQ29tcGxldGUpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIW1fY2FjaGVFbnRyeSAmJiBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSB7Ci0gICAg
ICAgIG1fY2FjaGVFbnRyeSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmUobV9vcmln
aW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUuY29weVJlZigp
LCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOworICAgICAgICBtX2NhY2hlRW50cnkgPSBtX2Nh
Y2hlLT5zdG9yZShtX29yaWdpbmFsUmVxdWVzdCwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFG
b3JDYWNoZS5jb3B5UmVmKCksIFtdKGF1dG8mIG1hcHBlZEJvZHkpIHsgfSk7CiAgICAgICAgIC8v
IENyZWF0ZSBhIHN5bnRoZXRpYyBjYWNoZSBlbnRyeSBpZiB3ZSBjYW4ndCBzdG9yZS4KICAgICAg
ICAgaWYgKCFtX2NhY2hlRW50cnkgJiYgaXNTdGF0dXNDb2RlQ2FjaGVhYmxlQnlEZWZhdWx0KG1f
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkpCi0gICAgICAgICAgICBtX2NhY2hlRW50cnkgPSBO
ZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLm1ha2VFbnRyeShtX29yaWdpbmFsUmVxdWVzdCwgbV9y
ZXNwb25zZSwgV1RGTW92ZShtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSk7CisgICAgICAgICAgICBt
X2NhY2hlRW50cnkgPSBtX2NhY2hlLT5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVz
cG9uc2UsIFdURk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOwogICAgIH0KIAogICAgIGRp
ZENvbXBsZXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgJKHJldmlz
aW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZF9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFU
SVZFX1JFVkFMSURBVElPTikKIApAQCAtNDUsNyArNDQsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUxv
YWQgZmluYWwgOiBwdWJsaWMgTmV0CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlOjpFbnRyeT4pPiBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlcjsKLSAgICBTcGVjdWxh
dGl2ZUxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiwgUmV2YWxpZGF0aW9u
Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgU3BlY3VsYXRpdmVMb2FkKENhY2hlJiwgY29uc3Qg
R2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiwgUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRs
ZXImJik7CiAKICAgICB2aXJ0dWFsIH5TcGVjdWxhdGl2ZUxvYWQoKTsKIApAQCAtNjYsNiArNjUs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRDb21wbGV0ZSgpOwogCisgICAgUmVmPENhY2hl
PiBtX2NhY2hlOwogICAgIEdsb2JhbEZyYW1lSUQgbV9mcmFtZUlEOwogICAgIFJldmFsaWRhdGlv
bkNvbXBsZXRpb25IYW5kbGVyIG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0OwpAQCAtODMsNSArODMsMyBAQCBwcml2YXRl
OgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNI
RV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCi0KLSNlbmRpZiAvLyBOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWRfaApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsOCArMjQ1LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkUmV0
cmlldmVFeGlzdGluZ0VudHJ5IHsgZmFsc2UgfTsKIH07CiAKLVNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXI6OlNwZWN1bGF0aXZlTG9hZE1hbmFnZXIoU3RvcmFnZSYgc3RvcmFnZSkKLSAgICA6IG1fc3Rv
cmFnZShzdG9yYWdlKQorU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6U3BlY3VsYXRpdmVMb2FkTWFu
YWdlcihDYWNoZSYgY2FjaGUsIFN0b3JhZ2UmIHN0b3JhZ2UpCisgICAgOiBtX2NhY2hlKGNhY2hl
KQorICAgICwgbV9zdG9yYWdlKHN0b3JhZ2UpCiB7CiB9CiAKQEAgLTQ2Niw3ICs0NjcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldmFsaWRhdGVTCiAKICAgICBMT0coTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBTcGVjdWxhdGl2
ZWx5IHJldmFsaWRhdGluZyAnJXMnOiIsIGtleS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICBhdXRvIHJldmFsaWRhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxv
YWQ+KGZyYW1lSUQsIHJldmFsaWRhdGlvblJlcXVlc3QsIFdURk1vdmUoZW50cnkpLCBbdGhpcywg
a2V5LCByZXZhbGlkYXRpb25SZXF1ZXN0LCBmcmFtZUlEXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IHJldmFsaWRhdGVkRW50cnkpIHsKKyAgICBhdXRvIHJldmFsaWRhdG9yID0gc3RkOjptYWtlX3Vu
aXF1ZTxTcGVjdWxhdGl2ZUxvYWQ+KG1fY2FjaGUsIGZyYW1lSUQsIHJldmFsaWRhdGlvblJlcXVl
c3QsIFdURk1vdmUoZW50cnkpLCBbdGhpcywga2V5LCByZXZhbGlkYXRpb25SZXF1ZXN0LCBmcmFt
ZUlEXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHJldmFsaWRhdGVkRW50cnkpIHsKICAgICAgICAg
QVNTRVJUKCFyZXZhbGlkYXRlZEVudHJ5IHx8ICFyZXZhbGlkYXRlZEVudHJ5LT5uZWVkc1ZhbGlk
YXRpb24oKSk7CiAgICAgICAgIEFTU0VSVCghcmV2YWxpZGF0ZWRFbnRyeSB8fCByZXZhbGlkYXRl
ZEVudHJ5LT5rZXkoKSA9PSBrZXkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgU3VicmVzb3VyY2VzRW50cnk7
CiBjbGFzcyBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKFN0b3Jh
Z2UmKTsKKyAgICBleHBsaWNpdCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKENhY2hlJiwgU3RvcmFn
ZSYpOwogICAgIH5TcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVy
TG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgS2V5JiByZXNvdXJjZUtleSk7CkBAIC03MCw2ICs3MCw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIGJvb2wgY2FuVXNlUHJlbG9hZGVkRW50cnkoY29uc3QgUHJlbG9hZGVkRW50cnkm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOwogICAgIHN0
YXRpYyBib29sIGNhblVzZVBlbmRpbmdQcmVsb2FkKGNvbnN0IFNwZWN1bGF0aXZlTG9hZCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgYWN0dWFsUmVxdWVzdCk7CiAKKyAgICBDYWNo
ZSYgbV9jYWNoZTsKICAgICBTdG9yYWdlJiBtX3N0b3JhZ2U7CiAKICAgICBjbGFzcyBQZW5kaW5n
RnJhbWVMb2FkOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAyMjAx
OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNiArNzQsMTcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZVNRTFN0YXRlbWVudChXZWJDb3JlOgogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCkKK3N0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPiBTdGF0aXN0aWNzOjpvcGVu
KENhY2hlJiBjYWNoZSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBTdGF0aXN0aWNzRGF0YWJhc2VOYW1l
KTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdGF0aXN0aWNzPihkYXRhYmFzZVBhdGgp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFN0YXRpc3RpY3M+KGNhY2hlLCBkYXRhYmFz
ZVBhdGgpOwogfQogCi1TdGF0aXN0aWNzOjpTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VQYXRoKQotICAgIDogbV9zZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiY29tLmFwcGxlLldlYktpdC5DYWNoZS5TdGF0aXN0aWNzLkJhY2tncm91bmQiLCBXb3JrUXVl
dWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQpKQorU3RhdGlzdGlj
czo6U3RhdGlzdGljcyhDYWNoZSYgY2FjaGUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQor
ICAgIDogbV9jYWNoZShjYWNoZSkKKyAgICAsIG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUoV29y
a1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5CYWNrZ3Jv
dW5kIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5k
KSkKICAgICAsIG1fd3JpdGVUaW1lcigqdGhpcywgJlN0YXRpc3RpY3M6OndyaXRlVGltZXJGaXJl
ZCkKIHsKICAgICBpbml0aWFsaXplKGRhdGFiYXNlUGF0aCk7CkBAIC05NSw3ICs5Niw3IEBAIHZv
aWQgU3RhdGlzdGljczo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gc3RhcnRU
aW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAKLSAgICBzZXJpYWxCYWNr
Z3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBkYXRhYmFzZVBhdGggPSBkYXRhYmFzZVBh
dGguaXNvbGF0ZWRDb3B5KCksIG5ldHdvcmtDYWNoZVBhdGggPSBzaW5nbGV0b24oKS5yZWNvcmRz
UGF0aCgpLmlzb2xhdGVkQ29weSgpLCBzdGFydFRpbWVdIHsKKyAgICBzZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBkYXRhYmFzZVBhdGggPSBkYXRhYmFzZVBhdGguaXNv
bGF0ZWRDb3B5KCksIG5ldHdvcmtDYWNoZVBhdGggPSBtX2NhY2hlLnJlY29yZHNQYXRoKCksIHN0
YXJ0VGltZV0gewogICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKICAgICAgICAgaWYgKCFXZWJDb3JlOjpt
YWtlQWxsRGlyZWN0b3JpZXMoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShkYXRhYmFzZVBhdGgpKSkK
QEAgLTE3OCw3ICsxNzksNyBAQCB2b2lkIFN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKIAog
ICAgIGNsZWFyKCk7CiAKLSAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0
aGlzLCBuZXR3b3JrQ2FjaGVQYXRoID0gc2luZ2xldG9uKCkucmVjb3Jkc1BhdGgoKS5pc29sYXRl
ZENvcHkoKV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMs
IG5ldHdvcmtDYWNoZVBhdGggPSBtX2NhY2hlLnJlY29yZHNQYXRoKCldIHsKICAgICAgICAgYm9v
dHN0cmFwRnJvbU5ldHdvcmtDYWNoZShuZXR3b3JrQ2FjaGVQYXRoKTsKICAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNoZSBzaHJpbmsgY29t
cGxldGVkIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4o
bV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpKTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCAr
NDMsOCBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogY2xhc3MgU3RhdGlzdGljcyB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPiBvcGVuKGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoKTsKLSAgICBleHBsaWNpdCBTdGF0aXN0aWNzKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VQYXRoKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFN0YXRpc3RpY3M+
IG9wZW4oQ2FjaGUmLCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7CisgICAgZXhwbGljaXQgU3Rh
dGlzdGljcyhDYWNoZSYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKIAogICAgIHZvaWQg
Y2xlYXIoKTsKIApAQCAtNzcsNiArNzcsOCBAQCBwcml2YXRlOgogICAgICAgICBSZXF1ZXN0ZWRD
b21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICB9OwogCisgICAgQ2FjaGUm
IG1fY2FjaGU7CisKICAgICBzdGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVFbnRyeUNv
dW50IHsgMCB9OwogCiAgICAgbXV0YWJsZSBSZWY8V29ya1F1ZXVlPiBtX3NlcmlhbEJhY2tncm91
bmRJT1F1ZXVlOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyMjAxOTgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsMTQgKzUzLDE3IEBAIHN0YXRpYyBkb3VibGUgY29t
cHV0ZVJlY29yZFdvcnRoKEZpbGVUaW0KIHN0cnVjdCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBSZWFkT3BlcmF0aW9u
KGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhh
bmRsZXIpCi0gICAgICAgIDoga2V5KGtleSkKKyAgICBSZWFkT3BlcmF0aW9uKFN0b3JhZ2UmIHN0
b3JhZ2UsIGNvbnN0IEtleSYga2V5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgICAgIDogc3RvcmFnZShzdG9yYWdlKQorICAgICAgICAsIGtleShr
ZXkpCiAgICAgICAgICwgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpCiAgICAgeyB9CiAKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIGJvb2wgZmluaXNoKCk7CiAK
KyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IEtleSBrZXk7CiAgICAgY29u
c3QgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICAKQEAg
LTk5LDExICsxMDIsMTMgQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2goKQog
c3RydWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBSZWNvcmQmIHJlY29yZCwg
TWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKLSAgICAgICAgOiByZWNvcmQo
cmVjb3JkKQorICAgIFdyaXRlT3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IFJlY29y
ZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQorICAgICAg
ICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCByZWNvcmQocmVjb3JkKQogICAgICAgICAs
IG1hcHBlZEJvZHlIYW5kbGVyKFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKQogICAgIHsgfQot
ICAgIAorICAgIFJlZjxTdG9yYWdlPiBzdG9yYWdlOworCiAgICAgY29uc3QgUmVjb3JkIHJlY29y
ZDsKICAgICBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciBtYXBwZWRCb2R5SGFuZGxlcjsKIApAQCAt
MTEzLDExICsxMTgsMTMgQEAgcHVibGljOgogc3RydWN0IFN0b3JhZ2U6OlRyYXZlcnNlT3BlcmF0
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUcmF2ZXJz
ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZl
cnNlSGFuZGxlciYmIGhhbmRsZXIpCi0gICAgICAgIDogdHlwZSh0eXBlKQorICAgIFRyYXZlcnNl
T3BlcmF0aW9uKFN0b3JhZ2UmIHN0b3JhZ2UsIGNvbnN0IFN0cmluZyYgdHlwZSwgVHJhdmVyc2VG
bGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgaGFuZGxlcikKKyAgICAgICAgOiBzdG9yYWdl
KHN0b3JhZ2UpCisgICAgICAgICwgdHlwZSh0eXBlKQogICAgICAgICAsIGZsYWdzKGZsYWdzKQog
ICAgICAgICAsIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKICAgICB7IH0KKyAgICBSZWY8U3Rv
cmFnZT4gc3RvcmFnZTsKIAogICAgIGNvbnN0IFN0cmluZyB0eXBlOwogICAgIGNvbnN0IFRyYXZl
cnNlRmxhZ3MgZmxhZ3M7CkBAIC0xNDksNyArMTU2LDcgQEAgc3RhdGljIFN0cmluZyBtYWtlU2Fs
dEZpbGVQYXRoKGNvbnN0IFN0cgogICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQobWFrZVZlcnNpb25lZERpcmVjdG9yeVBhdGgoYmFzZURpcmVjdG9yeVBhdGgpLCBz
YWx0RmlsZU5hbWUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gU3RvcmFnZTo6b3Bl
bihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgTW9kZSBtb2RlKQorUmVmUHRyPFN0b3JhZ2U+IFN0
b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUgbW9kZSkKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTgsNyArMTY1LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oYwogICAgIGF1dG8gc2FsdCA9IHJlYWRPck1h
a2VTYWx0KG1ha2VTYWx0RmlsZVBhdGgoY2FjaGVQYXRoKSk7CiAgICAgaWYgKCFzYWx0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+
KG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0b3JhZ2UoY2FjaGVQYXRoLCBtb2RlLCAqc2FsdCkpOwogfQogCiB2b2lkIHRyYXZl
cnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRUeXBlLCBjb25zdCBSZWNvcmRGaWxlVHJhdmVyc2VGdW5jdGlvbiYgZnVuY3Rpb24p
CkBAIC0yMjYsNiArMjMzLDEyIEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29uc3QgU3RyaW5nJiBiYXNl
RGlyZWMKIAogU3RvcmFnZTo6flN0b3JhZ2UoKQogeworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgQVNTRVJUKG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9hY3RpdmVUcmF2ZXJzZU9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fc3lu
Y2hyb25pemF0aW9uSW5Qcm9ncmVzcyk7CisgICAgQVNTRVJUKCFtX3Nocmlua0luUHJvZ3Jlc3Mp
OwogfQogCiBTdHJpbmcgU3RvcmFnZTo6YmFzZVBhdGgoKSBjb25zdApAQCAtMjU4LDcgKzI3MSw3
IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0
b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHN5bmNocm9uaXppbmcgY2FjaGUiKTsKIAotICAgIGJh
Y2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBiYWNrZ3JvdW5kSU9RdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11
dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29u
dGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIGF1dG8gYmxvYkZpbHRlciA9IHN0ZDo6bWFrZV91bmlx
dWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCByZWNvcmRzU2l6ZSA9IDA7CkBA
IC0zMDksNiArMzIyLDggQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgpCiAgICAgICAgIGRl
bGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKCkpOwogCiAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjYWNoZSBzeW5jaHJvbml6
YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSV1IiwgcmVjb3Jkc1NpemUsIGNvdW50KTsK
KworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01NTQsOCArNTY5LDkg
QEAgdm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiAKICAgICByZW1vdmVGcm9t
UGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhrZXkpOwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywga2V5XSB7CisgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBrZXldICgp
IG11dGFibGUgewogICAgICAgICBkZWxldGVGaWxlcyhrZXkpOworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7
IH0pOwogICAgIH0pOwogfQogCkBAIC01NzMsMTIgKzU4OSwxNCBAQCB2b2lkIFN0b3JhZ2U6OnJl
bW92ZShjb25zdCBWZWN0b3I8S2V5PiYgCiAgICAgICAgIGtleXNUb1JlbW92ZS51bmNoZWNrZWRB
cHBlbmQoa2V5KTsKICAgICB9CiAKLSAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3Bh
dGNoKFt0aGlzLCBrZXlzVG9SZW1vdmUgPSBXVEZNb3ZlKGtleXNUb1JlbW92ZSksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAg
IHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShrZXlzVG9SZW1vdmUpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUpCiAgICAgICAgICAgICBk
ZWxldGVGaWxlcyhrZXkpOwogCi0gICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKICAgICB9KTsKIH0K
IApAQCAtODA1LDcgKzgyMyw3IEBAIHZvaWQgU3RvcmFnZTo6cmV0cmlldmUoY29uc3QgS2V5JiBr
ZXksIHUKICAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZlV3JpdGVPcGVyYXRpb25z
LCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBy
ZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0aW9uPihrZXksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIHJlYWRPcGVyYXRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlzLCBrZXksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJpb3JpdHlbcHJpb3JpdHld
LnByZXBlbmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAgZGlzcGF0Y2hQZW5kaW5nUmVh
ZE9wZXJhdGlvbnMoKTsKIH0KQEAgLTgxOCw3ICs4MzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnN0b3Jl
KGNvbnN0IFJlY29yZCYgcmVjb3JkCiAgICAgaWYgKCFtX2NhcGFjaXR5KQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXcml0ZU9w
ZXJhdGlvbj4ocmVjb3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSk7CisgICAgYXV0byB3
cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVPcGVyYXRpb24+KCp0aGlzLCBy
ZWNvcmQsIFdURk1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdXcml0ZU9w
ZXJhdGlvbnMucHJlcGVuZChXVEZNb3ZlKHdyaXRlT3BlcmF0aW9uKSk7CiAKICAgICAvLyBBZGQg
a2V5IHRvIHRoZSBmaWx0ZXIgYWxyZWFkeSBoZXJlIGFzIHdlIGRvIGxvb2t1cHMgZnJvbSB0aGUg
cGVuZGluZyBvcGVyYXRpb25zIHRvby4KQEAgLTg0MCw3ICs4NTgsNyBAQCB2b2lkIFN0b3JhZ2U6
OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwCiAgICAgQVNTRVJUKHRyYXZlcnNlSGFuZGxlcik7
CiAgICAgLy8gQXZvaWQgbm9uLXRocmVhZCBzYWZlIEZ1bmN0aW9uIGNvcGllcy4KIAotICAgIGF1
dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRyYXZlcnNlT3BlcmF0
aW9uPih0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKKyAgICBhdXRvIHRy
YXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2ZXJzZU9wZXJhdGlvbj4o
KnRoaXMsIHR5cGUsIGZsYWdzLCBXVEZNb3ZlKHRyYXZlcnNlSGFuZGxlcikpOwogICAgIGF1dG8m
IHRyYXZlcnNlT3BlcmF0aW9uID0gKnRyYXZlcnNlT3BlcmF0aW9uUHRyOwogICAgIG1fYWN0aXZl
VHJhdmVyc2VPcGVyYXRpb25zLmFkZChXVEZNb3ZlKHRyYXZlcnNlT3BlcmF0aW9uUHRyKSk7CiAK
QEAgLTkzNiw3ICs5NTQsNyBAQCB2b2lkIFN0b3JhZ2U6OmNsZWFyKGNvbnN0IFN0cmluZyYgdHlw
ZSwgCiAgICAgICAgIG1fYmxvYkZpbHRlci0+Y2xlYXIoKTsKICAgICBtX2FwcHJveGltYXRlUmVj
b3Jkc1NpemUgPSAwOwogCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBtb2RpZmllZFNp
bmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
dHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgeworICAgIGlvUXVldWUoKS5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2RpZmllZFNp
bmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
dHlwZSA9IHR5cGUuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHJl
Y29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKICAgICAgICAgdHJhdmVyc2VSZWNvcmRz
RmlsZXMocmVjb3Jkc1BhdGgsIHR5cGUsIFttb2RpZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wgaXNCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9yeVBhdGgpIHsKICAgICAg
ICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cmVjb3JkRGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUpOwpAQCAtOTUzLDExICs5NzEsMTAgQEAgdm9p
ZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIAogICAgICAgICAvLyBUaGlzIGNs
ZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0b3JhZ2Uuc3luY2hyb25p
emUoKTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0geworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBpZiAoY29tcGxldGlvbkhh
bmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC0xMDE5LDcgKzEw
MzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBMT0coTmV0d29ya0NhY2hlU3Rv
cmFnZSwgIihOZXR3b3JrUHJvY2Vzcykgc2hyaW5raW5nIGNhY2hlIGFwcHJveGltYXRlU2l6ZT0l
enUgY2FwYWNpdHk9JXp1IiwgYXBwcm94aW1hdGVTaXplKCksIG1fY2FwYWNpdHkpOwogCi0gICAg
YmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAgIGJhY2tncm91bmRJT1F1
ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkg
bXV0YWJsZSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRzUGF0aCgp
OwogICAgICAgICBTdHJpbmcgYW55VHlwZTsKICAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMo
cmVjb3Jkc1BhdGgsIGFueVR5cGUsIFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCBpc0Jsb2IsIGNv
bnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgewpAQCAtMTA0Myw3ICsxMDYwLDcgQEAg
dm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKV0gewogICAgICAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAg
ICAgICAvLyBXZSBjb3VsZCBzeW5jaHJvbml6ZSBkdXJpbmcgdGhlIHNocmluayB0cmF2ZXJzYWwu
IEhvd2V2ZXIgdGhpcyBpcyBmYXN0IGFuZCBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBqdXN0IG9uZSBj
b2RlIHBhdGguCiAgICAgICAgICAgICBzeW5jaHJvbml6ZSgpOwpAQCAtMTA1NSw3ICsxMDcyLDcg
QEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiB2b2lkIFN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNp
b25zKCkKIHsKLSAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAg
YmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBjYWNoZVBhdGggPSBiYXNlUGF0
aCgpOwogICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIFsmY2FjaGVQYXRoXShj
b25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7CiAgICAg
ICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKQEAgLTEw
NzksNiArMTA5Niw4IEBAIHZvaWQgU3RvcmFnZTo6ZGVsZXRlT2xkVmVyc2lvbnMoKQogCiAgICAg
ICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShvbGRWZXJzaW9uUGF0aCk7CiAgICAg
ICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsgfSk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
LDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIE5ldHdvcmtDYWNoZVN0b3JhZ2VfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVTdG9yYWdl
X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKQEAgLTQ1LDEx
ICs0NCwxMCBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogY2xhc3MgSU9DaGFubmVsOwog
Ci1jbGFzcyBTdG9yYWdlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlKTsKK2Ns
YXNzIFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZT4gewogcHVi
bGljOgogICAgIGVudW0gY2xhc3MgTW9kZSB7IE5vcm1hbCwgVGVzdGluZyB9OwotICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gb3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwg
TW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2Fj
aGVQYXRoLCBNb2RlKTsKIAogICAgIHN0cnVjdCBSZWNvcmQgewogICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTE5Myw0ICsxOTEsMyBAQCB2b2lkIHRyYXZlcnNlUmVjb3Jkc0Zp
bGVzKGNvbnN0IFN0cmluZyYgCiB9CiB9CiAjZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4
NCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBOZXR3
b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIocGFy
YW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwogICAgIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihwYXJh
bWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcik7CiAgICAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6c2V0QWxsb3dzQ2VsbHVsYXJBY2Nlc3MocGFyYW1ldGVycy5hbGxvd3ND
ZWxsdWxhckFjY2Vzcyk7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0VXNlc05ldHdvcmtD
YWNoZShwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSk7CiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNl
VHlwZShwYXJhbWV0ZXJzLmN0RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSk7CiAjZW5kaWYKQEAg
LTEwOCw3ICsxMDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkg
ewotICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbj4gY2Fj
aGVPcHRpb25zOworICAgICAgICAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9w
dGlvbj4gY2FjaGVPcHRpb25zIHsgTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpSZWdpc3Rl
ck5vdGlmeSB9OwogICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29y
a0NhY2hlRWZmaWNhY3lMb2dnaW5nKQogICAgICAgICAgICAgICAgIGNhY2hlT3B0aW9ucyB8PSBO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb246OkVmZmljYWN5TG9nZ2luZzsKICAgICAgICAgICAg
IGlmIChwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbikKQEAgLTExNyw3
ICsxMTgsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAg
ICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVSZXZhbGlkYXRpb24pCiAgICAgICAgICAgICAgICAgY2FjaGVPcHRpb25zIHw9IE5ldHdvcmtD
YWNoZTo6Q2FjaGU6Ok9wdGlvbjo6U3BlY3VsYXRpdmVSZXZhbGlkYXRpb247CiAjZW5kaWYKLSAg
ICAgICAgICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNr
Q2FjaGVEaXJlY3RvcnksIGNhY2hlT3B0aW9ucykpIHsKKyAgICAgICAgICAgIG1fY2FjaGUgPSBO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpvcGVuKG1fZGlza0NhY2hlRGlyZWN0b3J5LCBjYWNoZU9wdGlv
bnMpOworCisgICAgICAgICAgICBpZiAobV9jYWNoZSkgeworICAgICAgICAgICAgICAgIC8vIERp
c2FibGUgTlNVUkxDYWNoZS4KICAgICAgICAgICAgICAgICBhdXRvIHVybENhY2hlKGFkb3B0TlMo
W1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0NhcGFjaXR5
OjAgZGlza1BhdGg6bmlsXSkpOwogICAgICAgICAgICAgICAgIFtOU1VSTENhY2hlIHNldFNoYXJl
ZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0x
ODcsMTYgKzE5MSwxOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShzdGQ6
CiAgICAgICAgIG1fY2xlYXJDYWNoZURpc3BhdGNoR3JvdXAgPSBkaXNwYXRjaF9ncm91cF9jcmVh
dGUoKTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIGF1dG8gZ3JvdXAgPSBtX2Ns
ZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwotICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jKGdyb3VwLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBCbG9ja1B0cjx2b2lkKCk+Ojpmcm9tQ2FsbGFibGUo
W2dyb3VwLCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5jbGVhcihtb2RpZmllZFNpbmNlLCBbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFByb2JhYmx5IG5vdCBuZWNlc3NhcnkuCi0gICAgICAgICAgICBj
bGVhck5TVVJMQ2FjaGUoZ3JvdXAsIG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgfSkuZ2V0KCkpOwotI2Vsc2UKLSAgICBjbGVhck5T
VVJMQ2FjaGUobV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmIChhdXRvKiBjYWNoZSA9IE5ldHdvcmtQcm9j
ZXNzOjpzaW5nbGV0b24oKS5jYWNoZSgpKSB7CisgICAgICAgIGF1dG8gZ3JvdXAgPSBtX2NsZWFy
Q2FjaGVEaXNwYXRjaEdyb3VwOworICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQdHI8dm9pZCgpPjo6ZnJvbUNhbGxhYmxl
KFtjYWNoZSwgZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgY2FjaGUtPmNs
ZWFyKG1vZGlmaWVkU2luY2UsIFtncm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFByb2JhYmx5IG5vdCBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAg
Y2xlYXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogI2VuZGlmCisgICAgY2xlYXJOU1VSTENhY2hlKG1fY2xlYXJDYWNoZURp
c3BhdGNoR3JvdXAsIG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgJKHJldmlzaW9uIDIyMDE5
OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
Jik7CiAgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIHNldEFsbG93c0NlbGx1bGFyQWNj
ZXNzKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldFVzZXNOZXR3b3JrQ2FjaGUoYm9vbCk7CiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNvbm5lY3Rpb25TZXJ2
aWNlVHlwZShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQko
cmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAj
aW1wb3J0ICJEb3dubG9hZC5oIgogI2ltcG9ydCAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJOZXR3b3JrQ2FjaGUuaCIKICNpbXBv
cnQgIk5ldHdvcmtMb2FkLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgogI2ltcG9ydCAi
U2Vzc2lvblRyYWNrZXIuaCIKQEAgLTQ0OSw2ICs0NDgsNyBAQCAtICh2b2lkKVVSTFNlc3Npb246
KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKIHN0YXRpYyBi
b29sIGFsbG93c0NlbGx1bGFyQWNjZXNzIHsgdHJ1ZSB9Oworc3RhdGljIGJvb2wgdXNlc05ldHdv
cmtDYWNoZSB7IGZhbHNlIH07CiBzdGF0aWMgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBs
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXI7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC01
MjAsNiArNTIwLDExIEBAIHZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0QWxsb3dzQ2VsbHUK
ICAgICBhbGxvd3NDZWxsdWxhckFjY2VzcyA9IHZhbHVlOwogfQogCit2b2lkIE5ldHdvcmtTZXNz
aW9uQ29jb2E6OnNldFVzZXNOZXR3b3JrQ2FjaGUoYm9vbCB2YWx1ZSkKK3sKKyAgICB1c2VzTmV0
d29ya0NhY2hlID0gdmFsdWU7Cit9CisKICNpZiBQTEFURk9STShJT1MpCiB2b2lkIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUpCiB7CkBAIC01NTMsMTAgKzU1OCwxMCBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3
b3JrU2Vzc2lvbkNvY29hCiAKICAgICBpZiAoIWFsbG93c0NlbGx1bGFyQWNjZXNzKQogICAgICAg
ICBjb25maWd1cmF0aW9uLmFsbG93c0NlbGx1bGFyQWNjZXNzID0gTk87Ci0gICAgCi0gICAgaWYg
KE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCisKKyAgICBpZiAodXNlc05l
dHdvcmtDYWNoZSkKICAgICAgICAgY29uZmlndXJhdGlvbi5VUkxDYWNoZSA9IG5pbDsKLSAgICAK
KwogICAgIGlmIChhdXRvJiBkYXRhID0gZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRpdFRva2Vu
RGF0YSgpKQogICAgICAgICBjb25maWd1cmF0aW9uLl9zb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9r
ZW5EYXRhID0gKE5TRGF0YSAqKWRhdGEuZ2V0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCShyZXZpc2lv
biAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJv
Y2Vzc0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpCiAgICAgaWYgKHJlc291cmNlQ2FjaGVzVG9DbGVh
ciA9PSBJbk1lbW9yeVJlc291cmNlQ2FjaGVzT25seSkKICAgICAgICAgcmV0dXJuOwogI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQotICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIo
KTsKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+Y2xlYXIoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVOCiAKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmNsZWFyT2xkU291cENhY2hlKFdl
YkNvcmU6OmRpcmVjdG9yeU5hbWUobV9kaXNrQ2FjaGVEaXJlY3RvcnkpKTsKIAotICAgIE9wdGlv
blNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb24+IGNhY2hlT3B0aW9uczsKKyAgICBPcHRp
b25TZXQ8TmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uPiBjYWNoZU9wdGlvbnMgeyBOZXR3b3Jr
Q2FjaGU6OkNhY2hlOjpPcHRpb246OlJlZ2lzdGVyTm90aWZ5IH07CiAgICAgaWYgKHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nKQogICAgICAgICBjYWNo
ZU9wdGlvbnMgfD0gTmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpFZmZpY2FjeUxvZ2dpbmc7
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQpAQCAt
MTIwLDcgKzEyMCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4K
ICAgICAgICAgY2FjaGVPcHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6U3Bl
Y3VsYXRpdmVSZXZhbGlkYXRpb247CiAjZW5kaWYKIAotICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRpb25zKTsKKyAg
ICBtX2NhY2hlID0gTmV0d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9y
eSwgY2FjaGVPcHRpb25zKTsKIAogICAgIGlmICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlcj4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsCkBAIC0xNTgsNyArMTU4LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6Y2xlYXJDYWNoZUZvckFsbE9yaQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tD
YWNoZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2Us
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS5jbGVhcihtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgaWYgKCFtX2NhY2hlKQorICAgICAgICByZXR1cm47CisgICAgbV9jYWNo
ZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCg==
</data>
<flag name="commit-queue"
          id="337826"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317238</attachid>
            <date>2017-08-04 05:45:06 -0700</date>
            <delta_ts>2017-08-04 06:25:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-non-singleton-7.patch</filename>
            <type>text/plain</type>
            <size>58982</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAyNjIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAxNy0wOC0wNCAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBjYWNoZSBzaG91bGQg
YmUgdXNhYmxlIGFzIG5vbi1zaW5nbGV0b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTEzOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCisKKyAgICAgICAgV2UgbWlnaHQgd2FudCB0byB1c2UgaXQgYXMgYSBub24tc2luZ2xldG9u
IGluIHRoZSBmdXR1cmUgKGZvciBleGFtcGxlIGFzIGEgYmFja2VuZCBmb3IgdGhlIGNhY2hlIEFQ
SSkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBOZXR3b3JrQ2FjaGU6OkNhY2hlIGFuZCBO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2UgcmVmY291bnRlZCBvYmplY3RzIGFuZCB0YWtlcworICAgICAg
ICBjYXJlIHRvIHJlZiB0aGVtIHByb3Blcmx5IGR1cmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9u
cy4KKworICAgICAgICBUaGUgcGF0Y2ggZG9lc24ndCBhY3R1YWxseSBjcmVhdGUgYW55IG5vbi1z
aGFyZWQgaW5zdGFuY2VzLCBpdCBqdXN0IGFkZHMgdGhlIGNhcGFiaWxpdHkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdG9yZURlcml2ZWRE
YXRhVG9DYWNoZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAoV2Vi
S2l0OjpjbGVhckRpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNhY2hlKToKKworICAg
ICAgICAgICAgTW92ZSB0aGUgc2hhcmVkIGNhY2hlIGluc3RhbmNlIHRvIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mgc2luZ2xldG9uLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorCisgICAgICAgICAgICBJbmNsdWRlIHNoYXJlZCBjYWNo
ZSBhcyBhIHJlZmZlZCBtZW1iZXIgZm9yIG5vbi1lcGhlbWVyYWwgaW5zdGFuY2VzLgorCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuVXNlQ2FjaGUgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRy
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZWRpcmVj
dGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5
U3RvcmVBc0NhY2hlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6b3Bl
bik6CisKKyAgICAgICAgICAgIE9wZW4gbm93IHJldHVybnMgbnVsbCBpZiBpdCBmYWlscy4KKyAg
ICAgICAgICAgIEFkZCBSZWdpc3Rlck5vdGlmeSBvcHRpb24gdG8gc2V0IHVwIG5vdGlmeSB0cmln
Z2VyIGZvciB0aGUgc2hhcmVkIGluc3RhbmNlLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q2FjaGU6OkNhY2hlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNo
ZTo6fkNhY2hlKToKKworICAgICAgICAgICAgQWRkIGRlc3RydWN0b3IuCisKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpkdW1wRmlsZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkNhY2hlOjpzZXRDYXBhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q2FjaGU6OnJldHJpZXZlKToKKworICAgICAgICAgICAgUHJvdGVjdCB0aGUgY2Fj
aGUgaW5zdGFuY2UgZHVyaW5nIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLgorCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpDYWNoZTo6c3RvcmVSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q2FjaGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6
ZHVtcENvbnRlbnRzVG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNo
ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZWNvcmRz
UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnJldHJp
ZXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnN0b3JlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6aW5pdGlhbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmg6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmNhblVzZVNoYXJlZE1lbW9yeUZvckJv
ZHlEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6aXNF
bmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKworICAgICAgICAgICAgUmVtb3ZlIGlzRW5hYmxlZCgp
IHN0YXRlIGFzIGEgY2FjaGUgb2JqZWN0IG5vdyBhbHdheXMgcmVwcmVzZW50cyBhbiBlbmFibGVk
IGNhY2hlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50
cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5Ojppbml0aWFsaXpl
U2hhcmVhYmxlUmVzb3VyY2VIYW5kbGVGcm9tU3RvcmFnZVJlY29yZCBjb25zdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6OndpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1
bGF0aXZlTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpSZWFkT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpXcml0ZU9w
ZXJhdGlvbjo6V3JpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OlN0b3JhZ2U6OlRyYXZlcnNlT3BlcmF0aW9uOjpUcmF2ZXJzZU9wZXJhdGlvbik6CisKKyAgICAg
ICAgICAgIE9wZXJhdGlvbnMgbm93IHJlZiB0aGUgc3RvcmFnZS4gVGhleSBhcmUgYWxyZWFkeSBk
ZWxldGVkIGluIHRoZSBtYWluIHRocmVhZCBzbworICAgICAgICAgICAgcHJvcGVyIGRlc3RydWN0
aW9uIGlzIHRha2VuIGNhcmUgb2YuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpT
dG9yYWdlOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjp+
U3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6c3luY2hy
b25pemUpOgorCisgICAgICAgICAgICBUaGlzIGFuZCBvdGhlciBhc3luY2hyb25vdXMgbWV0aG9k
cyBub3cgcHJvdGVjdCB0aGUgU3RvcmFnZSBpbnN0YW5jZS4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3RvcmFnZTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OlN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6Y2xl
YXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnNocmluayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6ZGVsZXRlT2xkVmVyc2lvbnMp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRp
c2tDYWNoZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nl
c3Npb25Db2NvYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vz
c1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
Y2xlYXJEaXNrQ2FjaGUpOgorCiAyMDE3LTA4LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdh
bGlhLmNvbT4KIAogICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
IHVzZXMgdGhlIHdyb25nIGZpeGVkIHBvc2l0aW9uIHJlY3RhbmdsZQpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDksNyArNDA5LDggQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6d3JpdAogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdG9yZURlcml2
ZWREYXRhVG9DYWNoZShjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YUtleSYgZGF0YUtl
eSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQogewotICAgIE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkuc3RvcmVEYXRhKGRhdGFLZXksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CisgICAgaWYgKGF1dG8qIGNhY2hlID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhY2hl
KCkpCisgICAgICAgIGNhY2hlLT5zdG9yZURhdGEoZGF0YUtleSwgZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q2Fw
dHVyZUV4dHJhTmV0d29ya0xvYWRNZXRyaWNzRW5hYmxlZChib29sIGVuYWJsZWQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2
aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw5ICszMjgsOSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjp1cGRhdGVDb29raWVQYXJ0aXRpCiBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVu
dHJpZXMoU2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRp
b24+IGZldGNoT3B0aW9ucywgRnVuY3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRy
eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQot
ICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKSB7CisgICAgaWYg
KGF1dG8qIGNhY2hlID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhY2hlKCkpIHsKICAg
ICAgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6
ZXM7Ci0gICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudHJhdmVyc2UoW2ZldGNoT3B0
aW9ucywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3Jp
Z2luc0FuZFNpemVzID0gV1RGTW92ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxF
bnRyeSkgbXV0YWJsZSB7CisgICAgICAgIGNhY2hlLT50cmF2ZXJzZShbZmV0Y2hPcHRpb25zLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zQW5k
U2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8qIHRyYXZlcnNhbEVudHJ5KSBt
dXRhYmxlIHsKICAgICAgICAgICAgIGlmICghdHJhdmVyc2FsRW50cnkpIHsKICAgICAgICAgICAg
ICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwogCkBAIC00MzYsMjAgKzQz
NiwyMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShTCiBzdGF0aWMg
dm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkuaXNFbmFibGVkKCkpIHsKKyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrUHJvY2Vzczo6
c2luZ2xldG9uKCkuY2FjaGUoKSkgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4+IG9yaWdpbnNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmln
aW5zKQogICAgICAgICAgICAgb3JpZ2luc1RvRGVsZXRlLmFkZChvcmlnaW4uc2VjdXJpdHlPcmln
aW4oKSk7CiAKICAgICAgICAgVmVjdG9yPE5ldHdvcmtDYWNoZTo6S2V5PiBjYWNoZUtleXNUb0Rl
bGV0ZTsKLSAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS50cmF2ZXJzZShbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc1RvRGVsZXRl
ID0gV1RGTW92ZShvcmlnaW5zVG9EZWxldGUpLCBjYWNoZUtleXNUb0RlbGV0ZSA9IFdURk1vdmUo
Y2FjaGVLZXlzVG9EZWxldGUpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CisgICAg
ICAgIGNhY2hlLT50cmF2ZXJzZShbY2FjaGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNUb0RlbGV0ZSA9IFdURk1vdmUob3JpZ2luc1RvRGVs
ZXRlKSwgY2FjaGVLZXlzVG9EZWxldGUgPSBXVEZNb3ZlKGNhY2hlS2V5c1RvRGVsZXRlKV0oYXV0
byogdHJhdmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHRyYXZlcnNhbEVu
dHJ5KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbnNUb0RlbGV0ZS5jb250YWlucyhTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKHRyYXZlcnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgp
KSkpCiAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5c1RvRGVsZXRlLmFwcGVuZCh0cmF2ZXJz
YWxFbnRyeS0+ZW50cnkua2V5KCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoY2Fj
aGVLZXlzVG9EZWxldGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAg
IGNhY2hlLT5yZW1vdmUoY2FjaGVLZXlzVG9EZWxldGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSk7CiAKQEAgLTU3NSw5ICs1NzUs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1vZGVsKHVpbnQzCiAgICAgICAgIHVy
bENhY2hlRGlza0NhcGFjaXR5ID0gbV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CiAKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKLSAgICBhdXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpOwotICAgIGlmIChuZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpIHsKLSAgICAg
ICAgbmV0d29ya0NhY2hlLnNldENhcGFjaXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICBp
ZiAobV9jYWNoZSkgeworICAgICAgICBtX2NhY2hlLT5zZXRDYXBhY2l0eSh1cmxDYWNoZURpc2tD
YXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDIyMDE5
OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTAgQEAgZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGU7
CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworY2xhc3Mg
Q2FjaGU7Cit9CisKIGNsYXNzIE5ldHdvcmtQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2Vzcywg
cHJpdmF0ZSBEb3dubG9hZE1hbmFnZXI6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTmV0d29ya1Byb2Nlc3MpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxOZXR3
b3JrUHJvY2Vzcz47CkBAIC04Niw2ICs5MCw5IEBAIHB1YmxpYzoKIAogICAgIEF1dGhlbnRpY2F0
aW9uTWFuYWdlciYgYXV0aGVudGljYXRpb25NYW5hZ2VyKCk7CiAgICAgRG93bmxvYWRNYW5hZ2Vy
JiBkb3dubG9hZE1hbmFnZXIoKTsKKworICAgIE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNhY2hlKCkg
eyByZXR1cm4gbV9jYWNoZS5nZXQoKTsgfQorCiAgICAgYm9vbCBjYW5IYW5kbGVIVFRQU1NlcnZl
clRydXN0RXZhbHVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuSGFuZGxlSFRUUFNTZXJ2ZXJU
cnVzdEV2YWx1YXRpb247IH0KIAogICAgIHZvaWQgcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eShib29sJiBoYW5kbGVkKTsKQEAgLTIyMCw2ICsyMjcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbjsKICAgICBTZWNvbmRzIG1fbG9h
ZFRocm90dGxlTGF0ZW5jeTsKIAorICAgIFJlZlB0cjxOZXR3b3JrQ2FjaGU6OkNhY2hlPiBtX2Nh
Y2hlOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IE5ldHdvcmtQ
cm9jZXNzU3VwcGxlbWVudE1hcDsKICAgICBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXAgbV9z
dXBwbGVtZW50czsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29y
a1Jlc291cmNlTG8KICAgICAsIG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQogICAgICwgbV9kZWZl
cnNMb2FkaW5nKHBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAgICAsIG1fYnVmZmVyaW5nVGlt
ZXIoKnRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQpCisg
ICAgLCBtX2NhY2hlKHNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkgPyBudWxscHRyIDogTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhY2hlKCkpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUg
ZXhpc3RlbmNlIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgaW4gV2ViQ29yZS4KQEAgLTEyMSwx
MCArMTIyLDEwIEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUwKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5V
c2VDYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0CiB7Ci0gICAgaWYg
KCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgaWYgKCFtX2Nh
Y2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFzZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpKTsKKwogICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCku
Y2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpEb05vdFVzZUFueUNhY2hlKQpAQCAtMTgxLDcgKzE4
Miw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNhY2gKICAgICBBU1NF
UlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxv
YWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmll
dmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJh
bWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1ZXN0XShhdXRvIGVu
dHJ5KSB7CisgICAgbV9jYWNoZS0+cmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92
ZShsb2FkZXIpLCByZXF1ZXN0XShhdXRvIGVudHJ5KSB7CiAgICAgICAgIGlmIChsb2FkZXItPmhh
c09uZVJlZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVyIGhhcyBiZWVuIGFib3J0ZWQg
YW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4KICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTMwNyw3ICszMDgsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQo
KQogICAgICAgICBpZiAoY2FuVXNlQ2FjaGUobV9uZXR3b3JrTG9hZC0+Y3VycmVudFJlcXVlc3Qo
KSkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGFscmVhZHkgaGF2ZSB1c2VkIGRhdGEgZnJv
bSB0aGlzIGluY29tcGxldGUgbG9hZC4gRW5zdXJlIG9sZGVyIHZlcnNpb25zIGRvbid0IHJlbWFp
biBpbiB0aGUgY2FjaGUgYWZ0ZXIgY2FuY2VsLgogICAgICAgICAgICAgaWYgKCFtX3Jlc3BvbnNl
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmVt
b3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCkpOworICAgICAgICAgICAgICAgIG1f
Y2FjaGUtPnJlbW92ZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVzdCgpKTsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNlbCgpOwpAQCAtMzM0LDcgKzMz
NSw3IEBAIGF1dG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBpZiAo
bV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBib29sIHZhbGlkYXRpb25TdWNj
ZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQgTm90IE1v
ZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVkKSB7Ci0gICAgICAgICAgICBt
X2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS51cGRh
dGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0
ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2Up
OworICAgICAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IG1fY2FjaGUtPnVwZGF0
ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRl
cnMud2ViRnJhbWVJRCB9LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY29uZGl0aW9uYWwgdGhlbiB0aGlz
IHJldmFsaWRhdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBieSB0aGUgbmV0d29yayBjYWNoZSBhbmQg
d2UgcGFzcyB0aGUgMzA0IHJlc3BvbnNlIHRvIFdlYkNvcmUuCiAgICAgICAgICAgICBpZiAob3Jp
Z2luYWxSZXF1ZXN0KCkuaXNDb25kaXRpb25hbCgpKQogICAgICAgICAgICAgICAgIG1fY2FjaGVF
bnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwpAQCAtNDcwLDcgKzQ3MSw3IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGkKIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogICAgIGlmIChjYW5Vc2VDYWNoZWRSZWRpcmVjdChyZXF1ZXN0KSkKLSAgICAgICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZVJlZGlyZWN0KHJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CisgICAgICAgIG1fY2FjaGUtPnN0b3JlUmVkaXJlY3Qo
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOwogI2VuZGlmCkBAIC01NTksNyArNTYwLDcgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeVN0b3JlQXNDYQogICAgIGlmICghbV9idWZmZXJlZERh
dGFGb3JDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5zdG9yZShtX25ldHdvcmtMb2FkLT5jdXJyZW50UmVxdWVzdCgpLCBtX3Jlc3BvbnNlLCBX
VEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyld
KGF1dG8mIG1hcHBlZEJvZHkpIG11dGFibGUgeworICAgIG1fY2FjaGUtPnN0b3JlKG1fbmV0d29y
a0xvYWQtPmN1cnJlbnRSZXF1ZXN0KCksIG1fcmVzcG9uc2UsIFdURk1vdmUobV9idWZmZXJlZERh
dGFGb3JDYWNoZSksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKV0oYXV0byYgbWFwcGVkQm9keSkg
bXV0YWJsZSB7CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKICAgICAgICAgaWYgKG1h
cHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC01ODgsNyArNTg5LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZFJldHJpZXZlQwogCiAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IG1fcGFyYW1ldGVycy5kZXJp
dmVkQ2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZSkgewogICAgICAgICAgICAgTmV0d29ya0NhY2hl
OjpEYXRhS2V5IGtleSB7IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCksIHR5cGUs
IGJvZHlIYXNoIH07Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJldHJp
ZXZlRGF0YShrZXksIFtsb2FkZXIgPSBtYWtlUmVmKCp0aGlzKSwgZW50cnlQdHIsIHR5cGUsIHJl
dHJpZXZlQ291bnRdIChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgbXV0YWJsZSB7
CisgICAgICAgICAgICBtX2NhY2hlLT5yZXRyaWV2ZURhdGEoa2V5LCBbbG9hZGVyID0gbWFrZVJl
ZigqdGhpcyksIGVudHJ5UHRyLCB0eXBlLCByZXRyaWV2ZUNvdW50XSAoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGxvYWRlci0+bV9y
ZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50Kys7CiAgICAgICAgICAgICAgICAgYm9vbCByZXRyaWV2
ZWRBbGwgPSBsb2FkZXItPm1fcmV0cmlldmVkRGVyaXZlZERhdGFDb3VudCA9PSByZXRyaWV2ZUNv
dW50OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5
PiBlbnRyeShyZXRyaWV2ZWRBbGwgPyBlbnRyeVB0ciA6IG51bGxwdHIpOwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5o
CShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFdlYkNvcmU6OlRpbWVyIG1fYnVmZmVyaW5nVGltZXI7CiAjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEUpCisgICAgUmVmUHRyPE5ldHdvcmtDYWNoZTo6Q2FjaGU+IG1fY2FjaGU7
CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9idWZmZXJlZERhdGFGb3JDYWNo
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gbV9jYWNoZUVudHJ5
Rm9yVmFsaWRhdGlvbjsKICAgICBib29sIG1faXNXYWl0aW5nQ29udGludWVXaWxsU2VuZFJlcXVl
c3RGb3JDYWNoZWRSZWRpcmVjdCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjAx
OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MiwxMCArNjIsMTYgQEAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgcmVzb3VyY2VUeXBlKAogICAgIHJldHVybiByZXNvdXJjZTsKIH0KIAotQ2FjaGUm
IHNpbmdsZXRvbigpCitSZWZQdHI8Q2FjaGU+IENhY2hlOjpvcGVuKGNvbnN0IFN0cmluZyYgY2Fj
aGVQYXRoLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDYWNoZT4gaW5zdGFuY2U7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGF1dG8g
c3RvcmFnZSA9IFN0b3JhZ2U6Om9wZW4oY2FjaGVQYXRoLCBvcHRpb25zLmNvbnRhaW5zKE9wdGlv
bjo6VGVzdGluZ01vZGUpID8gU3RvcmFnZTo6TW9kZTo6VGVzdGluZyA6IFN0b3JhZ2U6Ok1vZGU6
Ok5vcm1hbCk7CisKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBvcGVu
ZWQgY2FjaGUgc3RvcmFnZSwgc3VjY2VzcyAlZCIsICEhc3RvcmFnZSk7CisKKyAgICBpZiAoIXN0
b3JhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2FjaGUoc3RvcmFnZS5yZWxlYXNlTm9uTnVsbCgpLCBvcHRpb25zKSk7CiB9CiAKICNpZiBQ
TEFURk9STShHVEspCkBAIC03NSwxMCArODEsOSBAQCBzdGF0aWMgdm9pZCBkdW1wRmlsZUNoYW5n
ZWQoQ2FjaGUqIGNhY2hlCiB9CiAjZW5kaWYKIAotYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25z
dCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucykKK0NhY2hlOjpD
YWNoZShSZWY8U3RvcmFnZT4mJiBzdG9yYWdlLCBPcHRpb25TZXQ8T3B0aW9uPiBvcHRpb25zKQor
ICAgIDogbV9zdG9yYWdlKFdURk1vdmUoc3RvcmFnZSkpCiB7Ci0gICAgbV9zdG9yYWdlID0gU3Rv
cmFnZTo6b3BlbihjYWNoZVBhdGgsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpUZXN0aW5nTW9k
ZSkgPyBTdG9yYWdlOjpNb2RlOjpUZXN0aW5nIDogU3RvcmFnZTo6TW9kZTo6Tm9ybWFsKTsKLQog
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAgICBp
ZiAob3B0aW9ucy5jb250YWlucyhPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKSkgewog
ICAgICAgICBtX2xvd1Bvd2VyTW9kZU5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3Jl
OjpMb3dQb3dlck1vZGVOb3RpZmllcj4oW3RoaXNdKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVk
KSB7CkBAIC04Nyw0NCArOTIsNDEgQEAgYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmIGNhYwogICAgICAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IG51bGxw
dHI7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3BlY3Vs
YXRpdmVMb2FkTWFuYWdlcik7Ci0gICAgICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPigqbV9zdG9yYWdl
KTsKKyAgICAgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KCp0aGlzLCBtX3N0b3JhZ2UuZ2V0KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgaWYgKCFtX2xvd1Bvd2VyTW9kZU5v
dGlmaWVyLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1fc3BlY3VsYXRp
dmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4o
Km1fc3RvcmFnZSk7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI+KCp0aGlzLCBtX3N0b3JhZ2UuZ2V0
KCkpOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpF
ZmZpY2FjeUxvZ2dpbmcpKQotICAgICAgICBtX3N0YXRpc3RpY3MgPSBTdGF0aXN0aWNzOjpvcGVu
KGNhY2hlUGF0aCk7CisgICAgICAgIG1fc3RhdGlzdGljcyA9IFN0YXRpc3RpY3M6Om9wZW4oKnRo
aXMsIG1fc3RvcmFnZS0+YmFzZVBhdGgoKSk7CiAKKyAgICBpZiAob3B0aW9ucy5jb250YWlucyhP
cHRpb246OlJlZ2lzdGVyTm90aWZ5KSkgewogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIFRy
aWdnZXJzIHdpdGggIm5vdGlmeXV0aWwgLXAgY29tLmFwcGxlLldlYktpdC5DYWNoZS5kdW1wIi4K
LSAgICBpZiAobV9zdG9yYWdlKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIHdpdGggIm5vdGlmeXV0
aWwgLXAgY29tLmFwcGxlLldlYktpdC5DYWNoZS5kdW1wIi4KICAgICAgICAgaW50IHRva2VuOwog
ICAgICAgICBub3RpZnlfcmVnaXN0ZXJfZGlzcGF0Y2goImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUu
ZHVtcCIsICZ0b2tlbiwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXihpbnQpIHsKICAgICAg
ICAgICAgIGR1bXBDb250ZW50c1RvRmlsZSgpOwogICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYK
ICNpZiBQTEFURk9STShHVEspCi0gICAgLy8gVHJpZ2dlcnMgd2l0aCAidG91Y2ggJGNhY2hlUGF0
aC9kdW1wIi4KLSAgICBpZiAobV9zdG9yYWdlKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIHdpdGgg
InRvdWNoICRjYWNoZVBhdGgvZHVtcCIuCiAgICAgICAgIENTdHJpbmcgZHVtcEZpbGVQYXRoID0g
V2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX3N0b3JhZ2UtPmJhc2VQYXRoKCksICJkdW1wIikpOwogICAgICAgICBHUmVm
UHRyPEdGaWxlPiBkdW1wRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGR1bXBG
aWxlUGF0aC5kYXRhKCkpKTsKICAgICAgICAgR0ZpbGVNb25pdG9yKiBtb25pdG9yID0gZ19maWxl
X21vbml0b3JfZmlsZShkdW1wRmlsZS5nZXQoKSwgR19GSUxFX01PTklUT1JfTk9ORSwgbnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtb25pdG9yLCAi
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0soZHVtcEZpbGVDaGFuZ2VkKSwgdGhpcyk7Ci0gICAgfQogI2Vu
ZGlmCisgICAgfQorfQogCi0gICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
b3BlbmVkIGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7Ci0gICAgcmV0
dXJuICEhbV9zdG9yYWdlOworQ2FjaGU6On5DYWNoZSgpCit7CiB9CiAKIHZvaWQgQ2FjaGU6OnNl
dENhcGFjaXR5KHNpemVfdCBtYXhpbXVtU2l6ZSkKIHsKLSAgICBpZiAoIW1fc3RvcmFnZSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIG1fc3RvcmFnZS0+c2V0Q2FwYWNpdHkobWF4aW11bVNpemUpOwog
fQogCkBAIC0zMTUsNyArMzE3LDYgQEAgc3RhdGljIFN0b3JlRGVjaXNpb24gbWFrZVN0b3JlRGVj
aXNpb24oYwogCiB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIEZ1bmN0aW9uPHZv
aWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKTsKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nl
c3MpIHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJWQiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KHJlcXVlc3QucHJpb3JpdHkoKSkpOwpAQCAt
MzU1LDcgKzM1Niw3IEBAIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc28K
ICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwog
ICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVxdWVzdC5wcmlvcml0
eSgpKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0
aGlzLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1lSURdKGF1dG8gcmVjb3JkKSB7CisgICAg
bV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShh
dXRvIHJlY29yZCkgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIApA
QCAtNDA4LDcgKzQwOSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6Om1ha2VSZWRp
cmUKIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEs
IEZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBBU1NFUlQoaXNFbmFibGVkKCkpOwogICAgIEFTU0VSVChyZXNwb25zZURhdGEpOwogCiAgICAg
TE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RvcmluZyAlcywgcGFydGl0aW9u
ICVzIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIG1ha2VDYWNoZUtl
eShyZXF1ZXN0KS5wYXJ0aXRpb24oKS5sYXRpbjEoKS5kYXRhKCkpOwpAQCAtNDMzLDcgKzQzMyw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnMKICAgICBhdXRvIGNh
Y2hlRW50cnkgPSBtYWtlRW50cnkocmVxdWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VE
YXRhKSk7CiAgICAgYXV0byByZWNvcmQgPSBjYWNoZUVudHJ5LT5lbmNvZGVBc1N0b3JhZ2VSZWNv
cmQoKTsKIAotICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbdGhpcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oY29uc3QgRGF0YSYgYm9keURhdGEp
IHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oY29uc3QgRGF0YSYgYm9keURhdGEpIHsKICAgICAgICAgTWFwcGVkQm9keSBtYXBwZWRC
b2R5OwogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiAgICAgICAgIGlmIChjYW5Vc2VT
aGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpKSB7CkBAIC00NTMsOCArNDUzLDYgQEAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29ucwogCiBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IENhY2hlOjpzdG9yZVJlZGlyZWN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVkaXJlY3RSZXF1ZXN0KQogewotICAgIEFTU0VSVChp
c0VuYWJsZWQoKSk7Ci0KICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBz
dG9yaW5nIHJlZGlyZWN0ICVzIC0+ICVzIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEo
KS5kYXRhKCksIHJlZGlyZWN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkp
OwogCiAgICAgU3RvcmVEZWNpc2lvbiBzdG9yZURlY2lzaW9uID0gbWFrZVN0b3JlRGVjaXNpb24o
cmVxdWVzdCwgcmVzcG9uc2UsIDApOwpAQCAtNDk1LDggKzQ5Myw2IEBAIHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4gQ2FjaGU6OnVwZGF0ZShjb24KIAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IEtl
eSYga2V5KQogewotICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0KICAgICBtX3N0b3JhZ2UtPnJl
bW92ZShrZXkpOwogfQogCkBAIC01MDcsMTUgKzUwMywxMSBAQCB2b2lkIENhY2hlOjpyZW1vdmUo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyCiAKIHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBWZWN0b3I8
S2V5PiYga2V5cywgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5cywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIENhY2hlOjp0cmF2ZXJzZShGdW5j
dGlvbjx2b2lkIChjb25zdCBUcmF2ZXJzYWxFbnRyeSopPiYmIHRyYXZlcnNlSGFuZGxlcikKIHsK
LSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNsaWVu
dHMgbWFraW5nIGV4Y2Vzc2l2ZSB0cmF2ZXJzYWwgcmVxdWVzdHMuCiAgICAgY29uc3QgdW5zaWdu
ZWQgbWF4aW11bVRyYXZlcnNlQ291bnQgPSAzOwogICAgIGlmIChtX3RyYXZlcnNlQ291bnQgPj0g
bWF4aW11bVRyYXZlcnNlQ291bnQpIHsKQEAgLTUyOSw3ICs1MjEsNyBAQCB2b2lkIENhY2hlOjp0
cmF2ZXJzZShGdW5jdGlvbjx2b2lkIChjb25zCiAKICAgICArK21fdHJhdmVyc2VDb3VudDsKIAot
ICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UocmVzb3VyY2VUeXBlKCksIDAsIFt0aGlzLCB0cmF2ZXJz
ZUhhbmRsZXIgPSBXVEZNb3ZlKHRyYXZlcnNlSGFuZGxlcildKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJiByZWNvcmRJbmZvKSB7CisgICAg
bV9zdG9yYWdlLT50cmF2ZXJzZShyZXNvdXJjZVR5cGUoKSwgMCwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgdHJhdmVyc2VIYW5kbGVyID0gV1RGTW92ZSh0cmF2ZXJzZUhh
bmRsZXIpXShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29yZCwgY29uc3QgU3RvcmFnZTo6UmVj
b3JkSW5mbyYgcmVjb3JkSW5mbykgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAg
ICAgLS1tX3RyYXZlcnNlQ291bnQ7CiAgICAgICAgICAgICB0cmF2ZXJzZUhhbmRsZXIobnVsbHB0
cik7CkBAIC01NTIsOCArNTQ0LDYgQEAgU3RyaW5nIENhY2hlOjpkdW1wRmlsZVBhdGgoKSBjb25z
dAogCiB2b2lkIENhY2hlOjpkdW1wQ29udGVudHNUb0ZpbGUoKQogewotICAgIGlmICghbV9zdG9y
YWdlKQotICAgICAgICByZXR1cm47CiAgICAgYXV0byBmZCA9IFdlYkNvcmU6Om9wZW5GaWxlKGR1
bXBGaWxlUGF0aCgpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOwogICAgIGlmICghV2ViQ29yZTo6
aXNIYW5kbGVWYWxpZChmZCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYyMCwxMCArNjEwLDYgQEAg
dm9pZCBDYWNoZTo6Y2xlYXIoc3RkOjpjaHJvbm86OnN5c3RlbV9jbAogICAgIGlmIChtX3N0YXRp
c3RpY3MpCiAgICAgICAgIG1fc3RhdGlzdGljcy0+Y2xlYXIoKTsKIAotICAgIGlmICghbV9zdG9y
YWdlKSB7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgU3RyaW5nIGFueVR5cGU7
CiAgICAgbV9zdG9yYWdlLT5jbGVhcihhbnlUeXBlLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKQEAgLTYzNywxMyArNjIzLDExIEBAIHZvaWQgQ2FjaGU6OmNs
ZWFyKCkKIAogU3RyaW5nIENhY2hlOjpyZWNvcmRzUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fc3RvcmFnZSA/IG1fc3RvcmFnZS0+cmVjb3Jkc1BhdGgoKSA6IFN0cmluZygpOworICAgIHJl
dHVybiBtX3N0b3JhZ2UtPnJlY29yZHNQYXRoKCk7CiB9CiAKIHZvaWQgQ2FjaGU6OnJldHJpZXZl
RGF0YShjb25zdCBEYXRhS2V5JiBkYXRhS2V5LCBGdW5jdGlvbjx2b2lkIChjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSk+IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVChp
c0VuYWJsZWQoKSk7Ci0KICAgICBLZXkga2V5IHsgZGF0YUtleSwgbV9zdG9yYWdlLT5zYWx0KCkg
fTsKICAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIHJlY29yZCkgewogICAgICAgICBpZiAo
IXJlY29yZCB8fCAhcmVjb3JkLT5ib2R5LnNpemUoKSkgewpAQCAtNjU3LDggKzY0MSw2IEBAIHZv
aWQgQ2FjaGU6OnJldHJpZXZlRGF0YShjb25zdCBEYXRhS2V5JiAKIAogdm9pZCBDYWNoZTo6c3Rv
cmVEYXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKQogewotICAgIGlmICghbV9zdG9yYWdlKQotICAgICAgICByZXR1cm47CiAgICAgS2V5
IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07CiAgICAgU3RvcmFnZTo6UmVjb3Jk
IHJlY29yZCB7IGtleSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCksIHsgfSwgRGF0
YSB7IGRhdGEsIHNpemUgfSwgeyB9IH07CiAgICAgbV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIHsg
fSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlLmgJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw3
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBO
ZXR3b3JrQ2FjaGVfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVfaAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIApAQCAtNTAsOCArNDksNiBAQCBjbGFzcyBDYWNoZTsK
IGNsYXNzIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI7CiBjbGFzcyBTdGF0aXN0aWNzOwogCi1DYWNo
ZSYgc2luZ2xldG9uKCk7Ci0KIHN0cnVjdCBNYXBwZWRCb2R5IHsKICNpZiBFTkFCTEUoU0hBUkVB
QkxFX1JFU09VUkNFKQogICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gc2hhcmVhYmxlUmVz
b3VyY2U7CkBAIC05MSwyMiArODgsMjAgQEAgZW51bSBjbGFzcyBVc2VEZWNpc2lvbiB7CiAKIHVz
aW5nIEdsb2JhbEZyYW1lSUQgPSBzdGQ6OnBhaXI8dWludDY0X3QgLyp3ZWJQYWdlSUQqLywgdWlu
dDY0X3QgLyp3ZWJGcmFtZUlEKi8+OwogCi1jbGFzcyBDYWNoZSB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ2FjaGUpOwotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENh
Y2hlPjsKK2NsYXNzIENhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGU+IHsKIHB1YmxpYzoK
ICAgICBlbnVtIGNsYXNzIE9wdGlvbiB7CiAgICAgICAgIEVmZmljYWN5TG9nZ2luZyA9IDEgPDwg
MCwKICAgICAgICAgLy8gSW4gdGVzdGluZyBtb2RlIHdlIHRyeSB0byBlbGltaW5hdGUgc291cmNl
cyBvZiByYW5kb21uZXNzLiBDYWNoZSBkb2VzIG5vdCBzaHJpbmsgYW5kIHRoZXJlIGFyZSBubyBy
ZWFkIHRpbWVvdXRzLgogICAgICAgICBUZXN0aW5nTW9kZSA9IDEgPDwgMSwKKyAgICAgICAgUmVn
aXN0ZXJOb3RpZnkgPSAxIDw8IDIsCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJ
VkVfUkVWQUxJREFUSU9OKQotICAgICAgICBTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IDEgPDwg
MiwKKyAgICAgICAgU3BlY3VsYXRpdmVSZXZhbGlkYXRpb24gPSAxIDw8IDMsCiAjZW5kaWYKICAg
ICB9OwotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgT3B0aW9u
U2V0PE9wdGlvbj4pOwotICAgIHZvaWQgc2V0Q2FwYWNpdHkoc2l6ZV90KTsKKyAgICBzdGF0aWMg
UmVmUHRyPENhY2hlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBPcHRpb25TZXQ8T3B0
aW9uPik7CiAKLSAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdG9yYWdl
OyB9CisgICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwogCiAgICAgLy8gQ29tcGxldGlvbiBo
YW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sgc3luY2hyb25vdXNseSBvbiBmYWlsdXJlLgogICAg
IHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xv
YmFsRnJhbWVJRCYsIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiYmKTsK
QEAgLTEzNSwyMiArMTMwLDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBDb250ZW50c1RvRmls
ZSgpOwogCiAgICAgU3RyaW5nIHJlY29yZHNQYXRoKCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5Vc2VT
aGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZSAmJiBtX3N0
b3JhZ2UtPmNhblVzZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRhKCk7IH0KKyAgICBib29sIGNhblVz
ZVNoYXJlZE1lbW9yeUZvckJvZHlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5jYW5V
c2VTaGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpOyB9CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCiAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciog
c3BlY3VsYXRpdmVMb2FkTWFuYWdlcigpIHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICB+Q2FjaGUoKTsKKwogcHJpdmF0ZToKLSAgICBDYWNo
ZSgpID0gZGVmYXVsdDsKLSAgICB+Q2FjaGUoKSA9IGRlbGV0ZTsKKyAgICBDYWNoZShSZWY8U3Rv
cmFnZT4mJiwgT3B0aW9uU2V0PE9wdGlvbj4gb3B0aW9ucyk7CiAKICAgICBLZXkgbWFrZUNhY2hl
S2V5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgU3RyaW5nIGR1bXBG
aWxlUGF0aCgpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRlRHVtcEZpbGUoKTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgUmVmPFN0b3JhZ2U+IG1fc3RvcmFn
ZTsKKwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TG93UG93ZXJNb2RlTm90aWZpZXI+IG1fbG93
UG93ZXJNb2RlTm90aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNwZWN1bGF0aXZlTG9hZE1h
bmFnZXI+IG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlcjsKQEAgLTE2Myw0ICsxNjAsMyBAQCBwcml2
YXRlOgogfQogfQogI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lv
biAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KQEAgLTE0Niw3ICsxNDcsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IEVudHJ5OjpkZWNvZGVTdG9yCiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKIHZvaWQg
RW50cnk6OmluaXRpYWxpemVTaGFyZWFibGVSZXNvdXJjZUhhbmRsZUZyb21TdG9yYWdlUmVjb3Jk
KCkgY29uc3QKIHsKLSAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2FuVXNlU2hh
cmVkTWVtb3J5Rm9yQm9keURhdGEoKSkKKyAgICBhdXRvKiBjYWNoZSA9IE5ldHdvcmtQcm9jZXNz
OjpzaW5nbGV0b24oKS5jYWNoZSgpOworICAgIGlmICghY2FjaGUgfHwgIWNhY2hlLT5jYW5Vc2VT
aGFyZWRNZW1vcnlGb3JCb2R5RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNo
YXJlZE1lbW9yeSA9IG1fc291cmNlU3RvcmFnZVJlY29yZC5ib2R5LnRyeUNyZWF0ZVNoYXJlZE1l
bW9yeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAkocmV2aXNp
b24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw5IEBA
IG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
U3BlY3VsYXRpdmVMb2FkOjpTcGVjdWxhdGl2ZUxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJh
bWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhY2hlOjpFbnRyeT4gY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIFJldmFsaWRhdGlvbkNv
bXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgOiBtX2ZyYW1lSUQoZnJh
bWVJRCkKK1NwZWN1bGF0aXZlTG9hZDo6U3BlY3VsYXRpdmVMb2FkKENhY2hlJiBjYWNoZSwgY29u
c3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIp
CisgICAgOiBtX2NhY2hlKGNhY2hlKQorICAgICwgbV9mcmFtZUlEKGZyYW1lSUQpCiAgICAgLCBt
X2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICwgbV9v
cmlnaW5hbFJlcXVlc3QocmVxdWVzdCkKICAgICAsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUoU2hh
cmVkQnVmZmVyOjpjcmVhdGUoKSkKQEAgLTcxLDEwICs3MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
TG9hZDo6d2lsbFNlbmRSZWRpcmVjdGVkCiB7CiAgICAgTE9HKE5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlUHJlbG9hZGluZywgIlNwZWN1bGF0aXZlIHJlZGlyZWN0ICVzIC0+ICVzIiwgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRpcmVjdFJlcXVlc3QudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgcmVkaXJl
Y3RSZXF1ZXN0KTsKKyAgICBtX2NhY2hlRW50cnkgPSBtX2NhY2hlLT5zdG9yZVJlZGlyZWN0KHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CiAgICAgLy8gQ3JlYXRl
IGEgc3ludGhldGljIGNhY2hlIGVudHJ5IGlmIHdlIGNhbid0IHN0b3JlLgogICAgIGlmICghbV9j
YWNoZUVudHJ5KQotICAgICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLm1ha2VSZWRpcmVjdEVudHJ5KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0
UmVxdWVzdCk7CisgICAgICAgIG1fY2FjaGVFbnRyeSA9IG1fY2FjaGUtPm1ha2VSZWRpcmVjdEVu
dHJ5KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsIHJlZGlyZWN0UmVxdWVzdCk7CiAKICAgICAv
LyBEb24ndCBmb2xsb3cgdGhlIHJlZGlyZWN0LiBUaGUgcmVkaXJlY3QgdGFyZ2V0IHdpbGwgYmUg
cmVnaXN0ZXJlZCBmb3Igc3BlY3VsYXRpdmUgbG9hZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAgICBk
aWRDb21wbGV0ZSgpOwpAQCAtODksNyArOTAsNyBAQCBhdXRvIFNwZWN1bGF0aXZlTG9hZDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlCiAKICAgICBib29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgaWYg
KHZhbGlkYXRpb25TdWNjZWVkZWQgJiYgbV9jYWNoZUVudHJ5KQotICAgICAgICBtX2NhY2hlRW50
cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZShtX29yaWdpbmFsUmVxdWVzdCwg
bV9mcmFtZUlELCAqbV9jYWNoZUVudHJ5LCBtX3Jlc3BvbnNlKTsKKyAgICAgICAgbV9jYWNoZUVu
dHJ5ID0gbV9jYWNoZS0+dXBkYXRlKG1fb3JpZ2luYWxSZXF1ZXN0LCBtX2ZyYW1lSUQsICptX2Nh
Y2hlRW50cnksIG1fcmVzcG9uc2UpOwogICAgIGVsc2UKICAgICAgICAgbV9jYWNoZUVudHJ5ID0g
bnVsbHB0cjsKIApAQCAtMTE1LDEwICsxMTYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRp
ZEZpbmlzaExvYWRpbmcoYwogICAgIGlmIChtX2RpZENvbXBsZXRlKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKCFtX2NhY2hlRW50cnkgJiYgbV9idWZmZXJlZERhdGFGb3JDYWNoZSkgewotICAg
ICAgICBtX2NhY2hlRW50cnkgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlKG1fb3Jp
Z2luYWxSZXF1ZXN0LCBtX3Jlc3BvbnNlLCBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLmNvcHlSZWYo
KSwgW10oYXV0byYgbWFwcGVkQm9keSkgeyB9KTsKKyAgICAgICAgbV9jYWNoZUVudHJ5ID0gbV9j
YWNoZS0+c3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fYnVmZmVyZWREYXRh
Rm9yQ2FjaGUuY29weVJlZigpLCBbXShhdXRvJiBtYXBwZWRCb2R5KSB7IH0pOwogICAgICAgICAv
LyBDcmVhdGUgYSBzeW50aGV0aWMgY2FjaGUgZW50cnkgaWYgd2UgY2FuJ3Qgc3RvcmUuCiAgICAg
ICAgIGlmICghbV9jYWNoZUVudHJ5ICYmIGlzU3RhdHVzQ29kZUNhY2hlYWJsZUJ5RGVmYXVsdCht
X3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpKQotICAgICAgICAgICAgbV9jYWNoZUVudHJ5ID0g
TmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5tYWtlRW50cnkobV9vcmlnaW5hbFJlcXVlc3QsIG1f
cmVzcG9uc2UsIFdURk1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSkpOworICAgICAgICAgICAg
bV9jYWNoZUVudHJ5ID0gbV9jYWNoZS0+bWFrZUVudHJ5KG1fb3JpZ2luYWxSZXF1ZXN0LCBtX3Jl
c3BvbnNlLCBXVEZNb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpKTsKICAgICB9CiAKICAgICBk
aWRDb21wbGV0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCShyZXZp
c2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3
b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxB
VElWRV9SRVZBTElEQVRJT04pCiAKQEAgLTQ1LDcgKzQ0LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVM
b2FkIGZpbmFsIDogcHVibGljIE5ldAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHR5cGVkZWYgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtD
YWNoZTo6RW50cnk+KT4gUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXI7Ci0gICAgU3BlY3Vs
YXRpdmVMb2FkKGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4sIFJldmFsaWRhdGlv
bkNvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIFNwZWN1bGF0aXZlTG9hZChDYWNoZSYsIGNvbnN0
IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4sIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5k
bGVyJiYpOwogCiAgICAgdmlydHVhbCB+U3BlY3VsYXRpdmVMb2FkKCk7CiAKQEAgLTY2LDYgKzY1
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkQ29tcGxldGUoKTsKIAorICAgIFJlZjxDYWNo
ZT4gbV9jYWNoZTsKICAgICBHbG9iYWxGcmFtZUlEIG1fZnJhbWVJRDsKICAgICBSZXZhbGlkYXRp
b25Db21wbGV0aW9uSGFuZGxlciBtX2NvbXBsZXRpb25IYW5kbGVyOwogICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCBtX29yaWdpbmFsUmVxdWVzdDsKQEAgLTgzLDUgKzgzLDMgQEAgcHJpdmF0
ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FD
SEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQotCi0jZW5kaWYgLy8gTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQ1LDggKzI0NSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFJl
dHJpZXZlRXhpc3RpbmdFbnRyeSB7IGZhbHNlIH07CiB9OwogCi1TcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyOjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKFN0b3JhZ2UmIHN0b3JhZ2UpCi0gICAgOiBtX3N0
b3JhZ2Uoc3RvcmFnZSkKK1NwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlNwZWN1bGF0aXZlTG9hZE1h
bmFnZXIoQ2FjaGUmIGNhY2hlLCBTdG9yYWdlJiBzdG9yYWdlKQorICAgIDogbV9jYWNoZShjYWNo
ZSkKKyAgICAsIG1fc3RvcmFnZShzdG9yYWdlKQogewogfQogCkBAIC00NjYsNyArNDY3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXZhbGlkYXRlUwogCiAgICAgTE9HKE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgU3BlY3VsYXRp
dmVseSByZXZhbGlkYXRpbmcgJyVzJzoiLCBrZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgYXV0byByZXZhbGlkYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVM
b2FkPihmcmFtZUlELCByZXZhbGlkYXRpb25SZXF1ZXN0LCBXVEZNb3ZlKGVudHJ5KSwgW3RoaXMs
IGtleSwgcmV2YWxpZGF0aW9uUmVxdWVzdCwgZnJhbWVJRF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5
PiByZXZhbGlkYXRlZEVudHJ5KSB7CisgICAgYXV0byByZXZhbGlkYXRvciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BlY3VsYXRpdmVMb2FkPihtX2NhY2hlLCBmcmFtZUlELCByZXZhbGlkYXRpb25SZXF1
ZXN0LCBXVEZNb3ZlKGVudHJ5KSwgW3RoaXMsIGtleSwgcmV2YWxpZGF0aW9uUmVxdWVzdCwgZnJh
bWVJRF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiByZXZhbGlkYXRlZEVudHJ5KSB7CiAgICAgICAg
IEFTU0VSVCghcmV2YWxpZGF0ZWRFbnRyeSB8fCAhcmV2YWxpZGF0ZWRFbnRyeS0+bmVlZHNWYWxp
ZGF0aW9uKCkpOwogICAgICAgICBBU1NFUlQoIXJldmFsaWRhdGVkRW50cnkgfHwgcmV2YWxpZGF0
ZWRFbnRyeS0+a2V5KCkgPT0ga2V5KTsKIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFN1YnJlc291cmNlc0VudHJ5
OwogY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcihTdG9y
YWdlJik7CisgICAgZXhwbGljaXQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcihDYWNoZSYsIFN0b3Jh
Z2UmKTsKICAgICB+U3BlY3VsYXRpdmVMb2FkTWFuYWdlcigpOwogCiAgICAgdm9pZCByZWdpc3Rl
ckxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IEtleSYgcmVzb3VyY2VLZXkpOwpAQCAtNzAsNiArNzAsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBib29sIGNhblVzZVByZWxvYWRlZEVudHJ5KGNvbnN0IFByZWxvYWRlZEVudHJ5
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KTsKICAgICBz
dGF0aWMgYm9vbCBjYW5Vc2VQZW5kaW5nUHJlbG9hZChjb25zdCBTcGVjdWxhdGl2ZUxvYWQmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOwogCisgICAgQ2Fj
aGUmIG1fY2FjaGU7CiAgICAgU3RvcmFnZSYgbV9zdG9yYWdlOwogCiAgICAgY2xhc3MgUGVuZGlu
Z0ZyYW1lTG9hZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjIw
MTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTYgKzc0LDE3IEBAIHN0YXRpYyBi
b29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZToKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFN0YXRpc3RpY3M+IFN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW5n
JiBjYWNoZVBhdGgpCitzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gU3RhdGlzdGljczo6b3Bl
bihDYWNoZSYgY2FjaGUsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgU3RhdGlzdGljc0RhdGFiYXNlTmFt
ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U3RhdGlzdGljcz4oZGF0YWJhc2VQYXRo
KTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdGF0aXN0aWNzPihjYWNoZSwgZGF0YWJh
c2VQYXRoKTsKIH0KIAotU3RhdGlzdGljczo6U3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIGRhdGFi
YXNlUGF0aCkKLSAgICA6IG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUoV29ya1F1ZXVlOjpjcmVh
dGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5CYWNrZ3JvdW5kIiwgV29ya1F1
ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kKSkKK1N0YXRpc3Rp
Y3M6OlN0YXRpc3RpY3MoQ2FjaGUmIGNhY2hlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkK
KyAgICA6IG1fY2FjaGUoY2FjaGUpCisgICAgLCBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3MuQmFja2dy
b3VuZCIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3Vu
ZCkpCiAgICAgLCBtX3dyaXRlVGltZXIoKnRoaXMsICZTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmly
ZWQpCiB7CiAgICAgaW5pdGlhbGl6ZShkYXRhYmFzZVBhdGgpOwpAQCAtOTUsNyArOTYsNyBAQCB2
b2lkIFN0YXRpc3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nCiAKICAgICBhdXRvIHN0YXJ0
VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCi0gICAgc2VyaWFsQmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgZGF0YWJhc2VQYXRoID0gZGF0YWJhc2VQ
YXRoLmlzb2xhdGVkQ29weSgpLCBuZXR3b3JrQ2FjaGVQYXRoID0gc2luZ2xldG9uKCkucmVjb3Jk
c1BhdGgoKS5pc29sYXRlZENvcHkoKSwgc3RhcnRUaW1lXSB7CisgICAgc2VyaWFsQmFja2dyb3Vu
ZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgZGF0YWJhc2VQYXRoID0gZGF0YWJhc2VQYXRoLmlz
b2xhdGVkQ29weSgpLCBuZXR3b3JrQ2FjaGVQYXRoID0gbV9jYWNoZS5yZWNvcmRzUGF0aCgpLCBz
dGFydFRpbWVdIHsKICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgICAgIGlmICghV2ViQ29yZTo6
bWFrZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZGF0YWJhc2VQYXRoKSkp
CkBAIC0xNzgsNyArMTc5LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAK
ICAgICBjbGVhcigpOwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChb
dGhpcywgbmV0d29ya0NhY2hlUGF0aCA9IHNpbmdsZXRvbigpLnJlY29yZHNQYXRoKCkuaXNvbGF0
ZWRDb3B5KCldIHsKKyAgICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlz
LCBuZXR3b3JrQ2FjaGVQYXRoID0gbV9jYWNoZS5yZWNvcmRzUGF0aCgpXSB7CiAgICAgICAgIGJv
b3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29ya0NhY2hlUGF0aCk7CiAgICAgICAgIExPRyhO
ZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0YXRpc3RpY3MgY2FjaGUgc2hyaW5rIGNv
bXBsZXRlZCBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSk7CiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRp
c3RpY3MuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDgg
KzQzLDggQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIFN0YXRpc3RpY3Mgewog
cHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gb3Blbihjb25z
dCBTdHJpbmcmIGNhY2hlUGF0aCk7Ci0gICAgZXhwbGljaXQgU3RhdGlzdGljcyhjb25zdCBTdHJp
bmcmIGRhdGFiYXNlUGF0aCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNz
PiBvcGVuKENhY2hlJiwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpOworICAgIGV4cGxpY2l0IFN0
YXRpc3RpY3MoQ2FjaGUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAKICAgICB2b2lk
IGNsZWFyKCk7CiAKQEAgLTc3LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICAgICAgUmVxdWVzdGVk
Q29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKIAorICAgIENhY2hl
JiBtX2NhY2hlOworCiAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlRW50cnlD
b3VudCB7IDAgfTsKIAogICAgIG11dGFibGUgUmVmPFdvcmtRdWV1ZT4gbV9zZXJpYWxCYWNrZ3Jv
dW5kSU9RdWV1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjIwMTk4KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDE0ICs1MywxNyBAQCBzdGF0aWMgZG91YmxlIGNv
bXB1dGVSZWNvcmRXb3J0aChGaWxlVGltCiBzdHJ1Y3QgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUmVhZE9wZXJhdGlv
bihjb25zdCBLZXkmIGtleSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25I
YW5kbGVyKQotICAgICAgICA6IGtleShrZXkpCisgICAgUmVhZE9wZXJhdGlvbihTdG9yYWdlJiBz
dG9yYWdlLCBjb25zdCBLZXkmIGtleSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBs
ZXRpb25IYW5kbGVyKQorICAgICAgICA6IHN0b3JhZ2Uoc3RvcmFnZSkKKyAgICAgICAgLCBrZXko
a2V5KQogICAgICAgICAsIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKQogICAgIHsgfQogCiAgICAgdm9pZCBjYW5jZWwoKTsKICAgICBib29sIGZpbmlzaCgpOwog
CisgICAgUmVmPFN0b3JhZ2U+IHN0b3JhZ2U7CisKICAgICBjb25zdCBLZXkga2V5OwogICAgIGNv
bnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgCkBA
IC05OSwxMSArMTAyLDEzIEBAIGJvb2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkK
IHN0cnVjdCBTdG9yYWdlOjpXcml0ZU9wZXJhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgV3JpdGVPcGVyYXRpb24oY29uc3QgUmVjb3JkJiByZWNvcmQs
IE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCi0gICAgICAgIDogcmVjb3Jk
KHJlY29yZCkKKyAgICBXcml0ZU9wZXJhdGlvbihTdG9yYWdlJiBzdG9yYWdlLCBjb25zdCBSZWNv
cmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKKyAgICAg
ICAgOiBzdG9yYWdlKHN0b3JhZ2UpCisgICAgICAgICwgcmVjb3JkKHJlY29yZCkKICAgICAgICAg
LCBtYXBwZWRCb2R5SGFuZGxlcihXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSkKICAgICB7IH0K
LSAgICAKKyAgICBSZWY8U3RvcmFnZT4gc3RvcmFnZTsKKwogICAgIGNvbnN0IFJlY29yZCByZWNv
cmQ7CiAgICAgY29uc3QgTWFwcGVkQm9keUhhbmRsZXIgbWFwcGVkQm9keUhhbmRsZXI7CiAKQEAg
LTExMywxMSArMTE4LDEzIEBAIHB1YmxpYzoKIHN0cnVjdCBTdG9yYWdlOjpUcmF2ZXJzZU9wZXJh
dGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHJhdmVy
c2VPcGVyYXRpb24oY29uc3QgU3RyaW5nJiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2
ZXJzZUhhbmRsZXImJiBoYW5kbGVyKQotICAgICAgICA6IHR5cGUodHlwZSkKKyAgICBUcmF2ZXJz
ZU9wZXJhdGlvbihTdG9yYWdlJiBzdG9yYWdlLCBjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNl
RmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIGhhbmRsZXIpCisgICAgICAgIDogc3RvcmFn
ZShzdG9yYWdlKQorICAgICAgICAsIHR5cGUodHlwZSkKICAgICAgICAgLCBmbGFncyhmbGFncykK
ICAgICAgICAgLCBoYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCiAgICAgeyB9CisgICAgUmVmPFN0
b3JhZ2U+IHN0b3JhZ2U7CiAKICAgICBjb25zdCBTdHJpbmcgdHlwZTsKICAgICBjb25zdCBUcmF2
ZXJzZUZsYWdzIGZsYWdzOwpAQCAtMTQ5LDcgKzE1Niw3IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVNh
bHRGaWxlUGF0aChjb25zdCBTdHIKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1ha2VWZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwg
c2FsdEZpbGVOYW1lKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9w
ZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUgbW9kZSkKK1JlZlB0cjxTdG9yYWdlPiBT
dG9yYWdlOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBNb2RlIG1vZGUpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU4LDcgKzE2NSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxTdG9yYWdlPiBTdG9yYWdlOjpvcGVuKGMKICAgICBhdXRvIHNhbHQgPSByZWFkT3JN
YWtlU2FsdChtYWtlU2FsdEZpbGVQYXRoKGNhY2hlUGF0aCkpOwogICAgIGlmICghc2FsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdl
PihuZXcgU3RvcmFnZShjYWNoZVBhdGgsIG1vZGUsICpzYWx0KSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdG9yYWdlKGNhY2hlUGF0aCwgbW9kZSwgKnNhbHQpKTsKIH0KIAogdm9pZCB0cmF2
ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVHlwZSwgY29uc3QgUmVjb3JkRmlsZVRyYXZlcnNlRnVuY3Rpb24mIGZ1bmN0aW9u
KQpAQCAtMjI2LDYgKzIzMywxMiBAQCBTdG9yYWdlOjpTdG9yYWdlKGNvbnN0IFN0cmluZyYgYmFz
ZURpcmVjCiAKIFN0b3JhZ2U6On5TdG9yYWdlKCkKIHsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChtX2FjdGl2ZVJlYWRPcGVyYXRpb25zLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
KG1fYWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3N5
bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MpOworICAgIEFTU0VSVCghbV9zaHJpbmtJblByb2dyZXNz
KTsKIH0KIAogU3RyaW5nIFN0b3JhZ2U6OmJhc2VQYXRoKCkgY29uc3QKQEAgLTI1OCw3ICsyNzEs
NyBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgIExPRyhOZXR3b3JrQ2FjaGVT
dG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzeW5jaHJvbml6aW5nIGNhY2hlIik7CiAKLSAgICBi
YWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAgYmFja2dyb3VuZElPUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBt
dXRhYmxlIHsKICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
bnRlbnRzRmlsdGVyPigpOwogICAgICAgICBhdXRvIGJsb2JGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbnRlbnRzRmlsdGVyPigpOwogICAgICAgICBzaXplX3QgcmVjb3Jkc1NpemUgPSAwOwpA
QCAtMzA5LDYgKzMyMiw4IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogICAgICAgICBk
ZWxldGVFbXB0eVJlY29yZHNEaXJlY3RvcmllcyhyZWNvcmRzUGF0aCgpKTsKIAogICAgICAgICBM
T0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc3luY2hyb25p
emF0aW9uIGNvbXBsZXRlZCBzaXplPSV6dSBjb3VudD0ldSIsIHJlY29yZHNTaXplLCBjb3VudCk7
CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKV0geyB9KTsKICAgICB9KTsKIH0KIApAQCAtNTU0LDggKzU2OSw5
IEBAIHZvaWQgU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQogCiAgICAgcmVtb3ZlRnJv
bVBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoa2V5KTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1
ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGtleV0geworICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwga2V5XSAo
KSBtdXRhYmxlIHsKICAgICAgICAgZGVsZXRlRmlsZXMoa2V5KTsKKyAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtNTczLDEyICs1ODksMTQgQEAgdm9pZCBTdG9yYWdlOjpy
ZW1vdmUoY29uc3QgVmVjdG9yPEtleT4mIAogICAgICAgICBrZXlzVG9SZW1vdmUudW5jaGVja2Vk
QXBwZW5kKGtleSk7CiAgICAgfQogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNw
YXRjaChbdGhpcywga2V5c1RvUmVtb3ZlID0gV1RGTW92ZShrZXlzVG9SZW1vdmUpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAg
ICBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGtleXNUb1JlbW92ZSA9IFdURk1vdmUoa2V5c1RvUmVtb3ZlKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5c1RvUmVtb3ZlKQogICAgICAgICAgICAg
ZGVsZXRlRmlsZXMoa2V5KTsKIAotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAg
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9
CiAKQEAgLTgwNSw3ICs4MjMsNyBAQCB2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IEtleSYg
a2V5LCB1CiAgICAgaWYgKHJldHJpZXZlRnJvbU1lbW9yeShtX2FjdGl2ZVdyaXRlT3BlcmF0aW9u
cywga2V5LCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
cmVhZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oa2V5LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZWFkT3BlcmF0aW9uPigqdGhpcywga2V5LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W3ByaW9yaXR5
XS5wcmVwZW5kKFdURk1vdmUocmVhZE9wZXJhdGlvbikpOwogICAgIGRpc3BhdGNoUGVuZGluZ1Jl
YWRPcGVyYXRpb25zKCk7CiB9CkBAIC04MTgsNyArODM2LDcgQEAgdm9pZCBTdG9yYWdlOjpzdG9y
ZShjb25zdCBSZWNvcmQmIHJlY29yZAogICAgIGlmICghbV9jYXBhY2l0eSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byB3cml0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V3JpdGVP
cGVyYXRpb24+KHJlY29yZCwgV1RGTW92ZShtYXBwZWRCb2R5SGFuZGxlcikpOworICAgIGF1dG8g
d3JpdGVPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdyaXRlT3BlcmF0aW9uPigqdGhpcywg
cmVjb3JkLCBXVEZNb3ZlKG1hcHBlZEJvZHlIYW5kbGVyKSk7CiAgICAgbV9wZW5kaW5nV3JpdGVP
cGVyYXRpb25zLnByZXBlbmQoV1RGTW92ZSh3cml0ZU9wZXJhdGlvbikpOwogCiAgICAgLy8gQWRk
IGtleSB0byB0aGUgZmlsdGVyIGFscmVhZHkgaGVyZSBhcyB3ZSBkbyBsb29rdXBzIGZyb20gdGhl
IHBlbmRpbmcgb3BlcmF0aW9ucyB0b28uCkBAIC04NDAsNyArODU4LDcgQEAgdm9pZCBTdG9yYWdl
Ojp0cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5cAogICAgIEFTU0VSVCh0cmF2ZXJzZUhhbmRsZXIp
OwogICAgIC8vIEF2b2lkIG5vbi10aHJlYWQgc2FmZSBGdW5jdGlvbiBjb3BpZXMuCiAKLSAgICBh
dXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2ZXJzZU9wZXJh
dGlvbj4odHlwZSwgZmxhZ3MsIFdURk1vdmUodHJhdmVyc2VIYW5kbGVyKSk7CisgICAgYXV0byB0
cmF2ZXJzZU9wZXJhdGlvblB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8VHJhdmVyc2VPcGVyYXRpb24+
KCp0aGlzLCB0eXBlLCBmbGFncywgV1RGTW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKICAgICBhdXRv
JiB0cmF2ZXJzZU9wZXJhdGlvbiA9ICp0cmF2ZXJzZU9wZXJhdGlvblB0cjsKICAgICBtX2FjdGl2
ZVRyYXZlcnNlT3BlcmF0aW9ucy5hZGQoV1RGTW92ZSh0cmF2ZXJzZU9wZXJhdGlvblB0cikpOwog
CkBAIC05MzYsNyArOTU0LDcgQEAgdm9pZCBTdG9yYWdlOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5
cGUsIAogICAgICAgICBtX2Jsb2JGaWx0ZXItPmNsZWFyKCk7CiAgICAgbV9hcHByb3hpbWF0ZVJl
Y29yZHNTaXplID0gMDsKIAotICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRT
aW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHR5cGUgPSB0eXBlLmlzb2xhdGVkQ29weSgpXSAoKSBtdXRhYmxlIHsKKyAgICBpb1F1ZXVlKCku
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRT
aW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHR5cGUgPSB0eXBlLmlzb2xhdGVkQ29weSgpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBy
ZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7CiAgICAgICAgIHRyYXZlcnNlUmVjb3Jk
c0ZpbGVzKHJlY29yZHNQYXRoLCB0eXBlLCBbbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBl
LCBib29sIGlzQmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQYXRoKSB7CiAgICAg
ICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHJlY29yZERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKQEAgLTk1MywxMSArOTcxLDEwIEBAIHZv
aWQgU3RvcmFnZTo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlLCAKICAgICAgICAgLy8gVGhpcyBj
bGVhbnMgdW5yZWZlcmVuY2VkIGJsb2JzLgogICAgICAgICBtX2Jsb2JTdG9yYWdlLnN5bmNocm9u
aXplKCk7CiAKLSAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25I
YW5kbGVyKQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9KTsKIH0KIApAQCAtMTAxOSw3ICsx
MDM2LDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0
b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHNocmlua2luZyBjYWNoZSBhcHByb3hpbWF0ZVNpemU9
JXp1IGNhcGFjaXR5PSV6dSIsIGFwcHJveGltYXRlU2l6ZSgpLCBtX2NhcGFjaXR5KTsKIAotICAg
IGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICBiYWNrZ3JvdW5kSU9R
dWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgp
IG11dGFibGUgewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgo
KTsKICAgICAgICAgU3RyaW5nIGFueVR5cGU7CiAgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVz
KHJlY29yZHNQYXRoLCBhbnlUeXBlLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wgaXNCbG9iLCBj
b25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9yeVBhdGgpIHsKQEAgLTEwNDMsNyArMTA2MCw3IEBA
IHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyldIHsKICAgICAgICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAg
ICAgICAgLy8gV2UgY291bGQgc3luY2hyb25pemUgZHVyaW5nIHRoZSBzaHJpbmsgdHJhdmVyc2Fs
LiBIb3dldmVyIHRoaXMgaXMgZmFzdCBhbmQgaXQgaXMgYmV0dGVyIHRvIGhhdmUganVzdCBvbmUg
Y29kZSBwYXRoLgogICAgICAgICAgICAgc3luY2hyb25pemUoKTsKQEAgLTEwNTUsNyArMTA3Miw3
IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogdm9pZCBTdG9yYWdlOjpkZWxldGVPbGRWZXJz
aW9ucygpCiB7Ci0gICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAg
IGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gY2FjaGVQYXRoID0gYmFzZVBh
dGgoKTsKICAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBbJmNhY2hlUGF0aF0o
Y29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewogICAg
ICAgICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCkBAIC0x
MDc5LDYgKzEwOTYsOCBAQCB2b2lkIFN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKCkKIAogICAg
ICAgICAgICAgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkob2xkVmVyc2lvblBhdGgpOwogICAg
ICAgICB9KTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwogICAgIH0pOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuaAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Myw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBOZXR3b3JrQ2FjaGVTdG9yYWdlX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlU3RvcmFn
ZV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCkBAIC00NSwx
MSArNDQsMTAgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIGNsYXNzIElPQ2hhbm5lbDsK
IAotY2xhc3MgU3RvcmFnZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZSk7Citj
bGFzcyBTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2U+IHsKIHB1
YmxpYzoKICAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWwsIFRlc3RpbmcgfTsKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgs
IE1vZGUpOworICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZT4gb3Blbihjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCwgTW9kZSk7CiAKICAgICBzdHJ1Y3QgUmVjb3JkIHsKICAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC0xOTMsNCArMTkxLDMgQEAgdm9pZCB0cmF2ZXJzZVJlY29yZHNG
aWxlcyhjb25zdCBTdHJpbmcmIAogfQogfQogI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0JKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgTmV0
d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKHBh
cmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFy
YW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIpOwogICAgIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNldEFsbG93c0NlbGx1bGFyQWNjZXNzKHBhcmFtZXRlcnMuYWxsb3dz
Q2VsbHVsYXJBY2Nlc3MpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFVzZXNOZXR3b3Jr
Q2FjaGUocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUpOwogI2lmIFBMQVRGT1JN
KElPUykKICAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGUocGFyYW1ldGVycy5jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOwogI2VuZGlmCkBA
IC0xMDgsNyArMTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
TgogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQogICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUp
IHsKLSAgICAgICAgICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb24+IGNh
Y2hlT3B0aW9uczsKKyAgICAgICAgICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlOjpP
cHRpb24+IGNhY2hlT3B0aW9ucyB7IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6UmVnaXN0
ZXJOb3RpZnkgfTsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdv
cmtDYWNoZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgICAgICAgICBjYWNoZU9wdGlvbnMgfD0g
TmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpFZmZpY2FjeUxvZ2dpbmc7CiAgICAgICAgICAg
ICBpZiAocGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pCkBAIC0xMTcs
NyArMTE4LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAg
ICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlUmV2YWxpZGF0aW9uKQogICAgICAgICAgICAgICAgIGNhY2hlT3B0aW9ucyB8PSBOZXR3b3Jr
Q2FjaGU6OkNhY2hlOjpPcHRpb246OlNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uOwogI2VuZGlmCi0g
ICAgICAgICAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlz
a0NhY2hlRGlyZWN0b3J5LCBjYWNoZU9wdGlvbnMpKSB7CisgICAgICAgICAgICBtX2NhY2hlID0g
TmV0d29ya0NhY2hlOjpDYWNoZTo6b3BlbihtX2Rpc2tDYWNoZURpcmVjdG9yeSwgY2FjaGVPcHRp
b25zKTsKKworICAgICAgICAgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAvLyBE
aXNhYmxlIE5TVVJMQ2FjaGUuCiAgICAgICAgICAgICAgICAgYXV0byB1cmxDYWNoZShhZG9wdE5T
KFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0
eTowIGRpc2tQYXRoOm5pbF0pKTsKICAgICAgICAgICAgICAgICBbTlNVUkxDYWNoZSBzZXRTaGFy
ZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTg3LDE2ICsxOTEsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3Rk
OgogICAgICAgICBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3Jl
YXRlKCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBhdXRvIGdyb3VwID0gbV9j
bGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKLSAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgQmxvY2tQdHI8dm9pZCgpPjo6ZnJvbUNhbGxhYmxl
KFtncm91cCwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgW2dyb3VwLCBtb2RpZmllZFNpbmNlLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LgotICAgICAgICAgICAg
Y2xlYXJOU1VSTENhY2hlKGdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmdldCgpKTsKLSNlbHNlCi0gICAgY2xlYXJO
U1VSTENhY2hlKG1fY2xlYXJDYWNoZURpc3BhdGNoR3JvdXAsIG1vZGlmaWVkU2luY2UsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byogY2FjaGUgPSBOZXR3b3JrUHJv
Y2Vzczo6c2luZ2xldG9uKCkuY2FjaGUoKSkgeworICAgICAgICBhdXRvIGdyb3VwID0gbV9jbGVh
ckNhY2hlRGlzcGF0Y2hHcm91cDsKKyAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAs
IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIEJsb2NrUHRyPHZvaWQoKT46OmZyb21DYWxsYWJs
ZShbY2FjaGUsIGdyb3VwLCBtb2RpZmllZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhY2hlLT5j
bGVhcihtb2RpZmllZFNpbmNlLCBbZ3JvdXAsIG1vZGlmaWVkU2luY2UsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAg
IGNsZWFyTlNVUkxDYWNoZShncm91cCwgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICNlbmRpZgorICAgIGNsZWFyTlNVUkxDYWNoZShtX2NsZWFyQ2FjaGVE
aXNwYXRjaEdyb3VwLCBtb2RpZmllZFNpbmNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCShyZXZpc2lvbiAyMjAx
OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRBbGxvd3NDZWxsdWxhckFj
Y2Vzcyhib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VzTmV0d29ya0NhY2hlKGJvb2wpOwog
I2lmIFBMQVRGT1JNKElPUykKICAgICBzdGF0aWMgdm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2Vy
dmljZVR5cGUoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0J
KHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAog
I2ltcG9ydCAiRG93bmxvYWQuaCIKICNpbXBvcnQgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTmV0d29ya0NhY2hlLmgiCiAjaW1w
b3J0ICJOZXR3b3JrTG9hZC5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbXBvcnQg
IlNlc3Npb25UcmFja2VyLmgiCkBAIC00NDksNiArNDQ4LDcgQEAgLSAodm9pZClVUkxTZXNzaW9u
OihOU1VSTFNlc3Npb24gKilzZXNzaQogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgCiBzdGF0aWMg
Ym9vbCBhbGxvd3NDZWxsdWxhckFjY2VzcyB7IHRydWUgfTsKK3N0YXRpYyBib29sIHVzZXNOZXR3
b3JrQ2FjaGUgeyBmYWxzZSB9Owogc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlciog
bGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAt
NTIwLDYgKzUyMCwxMSBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldEFsbG93c0NlbGx1
CiAgICAgYWxsb3dzQ2VsbHVsYXJBY2Nlc3MgPSB2YWx1ZTsKIH0KIAordm9pZCBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpzZXRVc2VzTmV0d29ya0NhY2hlKGJvb2wgdmFsdWUpCit7CisgICAgdXNlc05l
dHdvcmtDYWNoZSA9IHZhbHVlOworfQorCiAjaWYgUExBVEZPUk0oSU9TKQogdm9pZCBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQogewpAQCAtNTUzLDEwICs1NTgsMTAgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0
d29ya1Nlc3Npb25Db2NvYQogCiAgICAgaWYgKCFhbGxvd3NDZWxsdWxhckFjY2VzcykKICAgICAg
ICAgY29uZmlndXJhdGlvbi5hbGxvd3NDZWxsdWxhckFjY2VzcyA9IE5POwotICAgIAotICAgIGlm
IChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQorCisgICAgaWYgKHVzZXNO
ZXR3b3JrQ2FjaGUpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBuaWw7Ci0gICAg
CisKICAgICBpZiAoYXV0byYgZGF0YSA9IGdsb2JhbFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tl
bkRhdGEoKSkKICAgICAgICAgY29uZmlndXJhdGlvbi5fc291cmNlQXBwbGljYXRpb25BdWRpdFRv
a2VuRGF0YSA9IChOU0RhdGEgKilkYXRhLmdldCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQkocmV2aXNp
b24gMjIwMTk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1By
b2Nlc3NJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJDYWNoZUZvckFsbE9yaQogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xl
YXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNsZWFy
KCk7CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CiAjZW5kaWYK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTgogCiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpjbGVhck9sZFNvdXBDYWNoZShX
ZWJDb3JlOjpkaXJlY3RvcnlOYW1lKG1fZGlza0NhY2hlRGlyZWN0b3J5KSk7CiAKLSAgICBPcHRp
b25TZXQ8TmV0d29ya0NhY2hlOjpDYWNoZTo6T3B0aW9uPiBjYWNoZU9wdGlvbnM7CisgICAgT3B0
aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbj4gY2FjaGVPcHRpb25zIHsgTmV0d29y
a0NhY2hlOjpDYWNoZTo6T3B0aW9uOjpSZWdpc3Rlck5vdGlmeSB9OwogICAgIGlmIChwYXJhbWV0
ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgY2Fj
aGVPcHRpb25zIHw9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Ok9wdGlvbjo6RWZmaWNhY3lMb2dnaW5n
OwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
CiAgICAgICAgIGNhY2hlT3B0aW9ucyB8PSBOZXR3b3JrQ2FjaGU6OkNhY2hlOjpPcHRpb246OlNw
ZWN1bGF0aXZlUmV2YWxpZGF0aW9uOwogI2VuZGlmCiAKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3RvcnksIGNhY2hlT3B0aW9ucyk7Cisg
ICAgbV9jYWNoZSA9IE5ldHdvcmtDYWNoZTo6Q2FjaGU6Om9wZW4obV9kaXNrQ2FjaGVEaXJlY3Rv
cnksIGNhY2hlT3B0aW9ucyk7CiAKICAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgewogICAgICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXI+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VQYXRoLApAQCAtMTU4LDcgKzE1OCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNr
Q2FjaGUoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNl
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIE5ldHdvcmtD
YWNoZTo6c2luZ2xldG9uKCkuY2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgIGlmICghbV9jYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2Fj
aGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>