<?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>225065</bug_id>
          
          <creation_ts>2021-04-26 11:41:05 -0700</creation_ts>
          <short_desc>Don&apos;t keep local storage data in memory in the NetworkProcess</short_desc>
          <delta_ts>2021-06-11 12:08:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225108</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225109</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226832</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226938</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1754283</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-26 11:41:05 -0700</bug_when>
    <thetext>Don&apos;t keep local storage data in memory in the NetworkProcess. Instead, just rely on the existing SQLiteDatabase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754284</commentid>
    <comment_count>1</comment_count>
      <attachid>427070</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-26 11:41:59 -0700</bug_when>
    <thetext>Created attachment 427070
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754429</commentid>
    <comment_count>2</comment_count>
      <attachid>427102</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-26 16:31:25 -0700</bug_when>
    <thetext>Created attachment 427102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754513</commentid>
    <comment_count>3</comment_count>
      <attachid>427102</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 00:23:20 -0700</bug_when>
    <thetext>Comment on attachment 427102
Patch

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

&gt; Source/WebCore/storage/StorageMap.cpp:187
&gt; +    return nullptr;

would it make sense to return &quot;this&quot; here, so you wouldn&apos;t need the conditional assignment in the call site?
Personally &quot;clear()&quot; is a bit confusing wrt the purpose. Maybe would call this &quot;duplicateEmpty()&quot; or &quot;createEmptyDuplicate()&quot;

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:240
&gt; +        return query-&gt;getColumnBlobAsString(0);

I think the error will be logged in this case.
If I understand correctly, this is not an error case?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:331
&gt; +    auto countStatement = makeUnique&lt;SQLiteStatement&gt;(m_database, &quot;SELECT COUNT(*) FROM ItemTable&quot;_s);

since this does not use scopedStatement, I don&apos;t think it needs to be allocated from heap? (Seeing it makes me think it escapes and then leads to investigation about why doesn&apos;t it escape)

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:361
&gt; +        statement = makeUnique&lt;SQLiteStatement&gt;(m_database, query);

just some thoughts about the general code, not related to this patch.
I&apos;d hope:
 ASCIILiteral query
 Optional&lt;SQLitePreparedStatement&gt;&amp; statement
 statement = m_database-&gt;prepare(query);
E.g. using SQLite statements wouldn&apos;t create nor store Strings since sqlite anyway operates on utf-8 cstrings. The queries are often literals)
the statement could be allocated inline in LocalStorageDatabase via Optional if it was not so big (storing the query and the database )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754606</commentid>
    <comment_count>4</comment_count>
      <attachid>427102</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 07:48:27 -0700</bug_when>
    <thetext>Comment on attachment 427102
Patch

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

&gt;&gt; Source/WebCore/storage/StorageMap.cpp:187
&gt;&gt; +    return nullptr;
&gt; 
&gt; would it make sense to return &quot;this&quot; here, so you wouldn&apos;t need the conditional assignment in the call site?
&gt; Personally &quot;clear()&quot; is a bit confusing wrt the purpose. Maybe would call this &quot;duplicateEmpty()&quot; or &quot;createEmptyDuplicate()&quot;

This is the whole pattern in this file. Every function on StorageMap behaves this way. While I don&apos;t mind refactoring, I don&apos;t think this should be done in this patch. I like the idea of return |this|. I don&apos;t like the new naming proposal. This is a clear() function, that just happens to copy on write if there is more than one user.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:240
&gt;&gt; +        return query-&gt;getColumnBlobAsString(0);
&gt; 
&gt; I think the error will be logged in this case.
&gt; If I understand correctly, this is not an error case?

Yes, looks like I messed up my error checking. I&apos;ll fix.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:331
&gt;&gt; +    auto countStatement = makeUnique&lt;SQLiteStatement&gt;(m_database, &quot;SELECT COUNT(*) FROM ItemTable&quot;_s);
&gt; 
&gt; since this does not use scopedStatement, I don&apos;t think it needs to be allocated from heap? (Seeing it makes me think it escapes and then leads to investigation about why doesn&apos;t it escape)

My bad. I initially used ScopedStatement then changed my mind and failed to restore the original code properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754607</commentid>
    <comment_count>5</comment_count>
      <attachid>427151</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 07:55:48 -0700</bug_when>
    <thetext>Created attachment 427151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754609</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 07:59:43 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; Comment on attachment 427102 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427102&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/storage/StorageMap.cpp:187
&gt; &gt;&gt; +    return nullptr;
&gt; &gt; 
&gt; &gt; would it make sense to return &quot;this&quot; here, so you wouldn&apos;t need the conditional assignment in the call site?
&gt; &gt; Personally &quot;clear()&quot; is a bit confusing wrt the purpose. Maybe would call this &quot;duplicateEmpty()&quot; or &quot;createEmptyDuplicate()&quot;
&gt; 
&gt; This is the whole pattern in this file. Every function on StorageMap behaves
&gt; this way. While I don&apos;t mind refactoring, I don&apos;t think this should be done
&gt; in this patch. I like the idea of return |this|. I don&apos;t like the new naming
&gt; proposal. This is a clear() function, that just happens to copy on write if
&gt; there is more than one user.

I will look into refactoring this in a separate patch. I think ideally, these functions wouldn&apos;t have to return anything and the copy-on-write behavior would be 100% internal to the StorageMap class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754668</commentid>
    <comment_count>7</comment_count>
      <attachid>427151</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-27 10:24:01 -0700</bug_when>
    <thetext>Comment on attachment 427151
Patch

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

&gt; Source/WebKit/ChangeLog:12
&gt; +        Both the NetworkProcess would keep the entries in memory, in a

NetworkProcess and WebProcess

&gt; Source/WebKit/ChangeLog:53
&gt; +        LocalStorageDatabase no longer has a queue on pending operations.

of

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:53
&gt; +    entrySize += key.length() * sizeof(UChar);

Do you think it would be worth checking if it&apos;s an 8 bit string and using sizeof(LChar) here?  It&apos;s also O(1) and gets a better estimate.
I guess this is used for estimating the size of writing to the database.  Does the database always store UChars?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:166
&gt; +HashMap&lt;String, String&gt; LocalStorageDatabase::items() const

Do we want to assert that we&apos;re not on the main run loop in these functions, since they do disk operations?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:244
&gt; +void LocalStorageDatabase::setItem(const String&amp; key, const String&amp; value, String&amp; oldValue, bool&amp; quotaException)

It would be nice if we could do this without out params.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp:152
&gt; -const HashMap&lt;String, String&gt;&amp; StorageArea::items() const
&gt; +HashMap&lt;String, String&gt; StorageArea::items() const

This copies the whole map.  Does it need to?

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:150
&gt; +    m_queue-&gt;dispatch([&amp;semaphore] {

dispatchSync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754669</commentid>
    <comment_count>8</comment_count>
      <attachid>427151</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 10:32:15 -0700</bug_when>
    <thetext>Comment on attachment 427151
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:53
&gt;&gt; +    entrySize += key.length() * sizeof(UChar);
&gt; 
&gt; Do you think it would be worth checking if it&apos;s an 8 bit string and using sizeof(LChar) here?  It&apos;s also O(1) and gets a better estimate.
&gt; I guess this is used for estimating the size of writing to the database.  Does the database always store UChars?

I matched the logic in StorageMap for now for size estimation. It may be worth improving but maybe I can do this separately since I&apos;d need to touch StorageMap too.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:166
&gt;&gt; +HashMap&lt;String, String&gt; LocalStorageDatabase::items() const
&gt; 
&gt; Do we want to assert that we&apos;re not on the main run loop in these functions, since they do disk operations?

Sure, I will add more assertions.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:244
&gt;&gt; +void LocalStorageDatabase::setItem(const String&amp; key, const String&amp; value, String&amp; oldValue, bool&amp; quotaException)
&gt; 
&gt; It would be nice if we could do this without out params.

Yes. Again, I am trying to match the StorageMap API though since one is used for session storage and the other for local storage and it makes the call sites nicer if we&apos;re consistent.
I&apos;d be happy to return a boolean instead but I&apos;d want to do the same for StorageMap for consistency. This means I likely want Bug 225108 to land first.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp:152
&gt;&gt; +HashMap&lt;String, String&gt; StorageArea::items() const
&gt; 
&gt; This copies the whole map.  Does it need to?

In the ephemeral case, yes, it does a copy.

In the non-ephemeral / database case, we construct the HashMap on the fly and don&apos;t store it so I cannot return a const ref. I&apos;ll give it some thought but I am not sure how to avoid that.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp:150
&gt;&gt; +    m_queue-&gt;dispatch([&amp;semaphore] {
&gt; 
&gt; dispatchSync?

See r274363. The issue is that dispatchSync() on cocoa uses GCD&apos;s dispatch_sync() which may not run the code on the destination thread. While dispatch_sync() does this in a thread-safe manner, it trips our internal threading assertions here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754675</commentid>
    <comment_count>9</comment_count>
      <attachid>427164</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 10:39:46 -0700</bug_when>
    <thetext>Created attachment 427164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754676</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 10:39:57 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; Created attachment 427164 [details]
&gt; Patch

Added more threading assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754716</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-27 11:27:26 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 427164 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754718</commentid>
    <comment_count>12</comment_count>
      <attachid>427177</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 11:33:42 -0700</bug_when>
    <thetext>Created attachment 427177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754723</commentid>
    <comment_count>13</comment_count>
      <attachid>427178</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 11:48:07 -0700</bug_when>
    <thetext>Created attachment 427178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754733</commentid>
    <comment_count>14</comment_count>
      <attachid>427178</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 12:03:05 -0700</bug_when>
    <thetext>Comment on attachment 427178
Patch

Clearing flags on attachment: 427178

Committed r276653 (237080@main): &lt;https://commits.webkit.org/237080@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754734</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 12:03:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754735</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-27 12:04:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/77222667&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427070</attachid>
            <date>2021-04-26 11:41:59 -0700</date>
            <delta_ts>2021-04-26 16:31:23 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>225065_doNotKeepStorageAreaEntriesInMemoryInNetworkProcess_WIP.patch</filename>
            <type>text/plain</type>
            <size>33651</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggMzcy
YjgxYmNlODNlLi4zODZiNmE3Mzc0MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
T3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fZGI7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
b3NlKCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxhc3RDaGFuZ2VzQ291bnQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUxhc3RDaGFuZ2VzQ291bnQoKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCByZXR1cm5z
QXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW50ZXJydXB0KCk7CiAKICAgICBpbnQ2NF90IGxh
c3RJbnNlcnRSb3dJRCgpOwotICAgIGludCBsYXN0Q2hhbmdlcygpOworICAgIFdFQkNPUkVfRVhQ
T1JUIGludCBsYXN0Q2hhbmdlcygpOwogCiAgICAgdm9pZCBzZXRCdXN5VGltZW91dChpbnQgbXMp
OwogICAgIHZvaWQgc2V0QnVzeUhhbmRsZXIoaW50KCopKHZvaWQqLCBpbnQpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IGRkYmUyMjEw
ZGM1ZS4uOWZmOWU4ZjFmMTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIHRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKTsKICNlbmRpZgogICAg
IAotICAgIHN0YXRpYyBsb25nIGxvbmcgZ2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFi
YXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkYXRhYmFzZUNyZWF0aW9uVGltZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgT3B0aW9uYWw8V2FsbFRp
bWU+IGRhdGFiYXNlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggZDQ3YzcyYjA2ZWZmLi5iOTBm
MjM1N2U1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApAQCAtMTc1LDYg
KzE3NSwyMCBAQCBSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6cmVtb3ZlSXRlbShjb25z
dCBTdHJpbmcmIGtleSwgU3RyaW5nJiBvbGRWYWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAorUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6OmNsZWFyKCkKK3sKKyAgICAvLyBJbXBs
ZW1lbnQgY29weS1vbi13cml0ZSBzZW1hbnRpY3MgaGVyZS4gV2UncmUgZ3VhcmFudGVlZCB0aGF0
IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3JhZ2Ugb2JqZWN0cwor
ICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwg
Y29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCisgICAgaWYgKHJlZkNvdW50KCkgPiAxICYmICFt
X21hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld1N0b3JhZ2Ug
PSBjb3B5KCk7CisgICAgICAgIG5ld1N0b3JhZ2UtPmNsZWFyKCk7CisgICAgICAgIHJldHVybiBu
ZXdTdG9yYWdlOworICAgIH0KKyAgICBtX21hcC5jbGVhcigpOworICAgIG1fY3VycmVudExlbmd0
aCA9IDA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgU3RvcmFnZU1hcDo6Y29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbWFwLmNvbnRhaW5z
KGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCmluZGV4IDRlYTllNzg5NmNhZi4u
MjJlOTc1YjljZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VN
YXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaApAQCAtNDMsNiAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFN0b3JhZ2VNYXA+IHNl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xk
VmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBy
ZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgb2xkVmFsdWUpOworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBjbGVhcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2UuY3BwCmluZGV4IDAyYzg2NzNkMzliMS4uMGNhY2NjYjRlZWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzUg
KzI3LDQ1IEBACiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCIKIAogI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRl
RmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1ZGRlblRlcm1p
bmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXN0YXRpYyBjb25zdCBh
dXRvIGRhdGFiYXNlVXBkYXRlSW50ZXJ2YWwgPSAxX3M7Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4
aW11bUl0ZW1zVG9VcGRhdGUgPSAxMDA7Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8TG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2Vj
dXJpdHlPcmlnaW4pCitzdGF0aWMgY29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAi
U0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiOworCitzdGF0aWMgQ2hlY2tlZFVpbnQ2
NCBlc3RpbWF0ZUVudHJ5U2l6ZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShXVEZN
b3ZlKHF1ZXVlKSwgV1RGTW92ZSh0cmFja2VyKSwgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICBDaGVj
a2VkVWludDY0IGVudHJ5U2l6ZTsKKyAgICBlbnRyeVNpemUgKz0ga2V5Lmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKTsKKyAgICBlbnRyeVNpemUgKz0gdmFsdWUubGVuZ3RoKCkgKiBzaXplb2YoVUNo
YXIpOworICAgIHJldHVybiBlbnRyeVNpemU7CiB9CiAKLUxvY2FsU3RvcmFnZURhdGFiYXNlOjpM
b2NhbFN0b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
c2VjdXJpdHlPcmlnaW4pCitSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IExvY2FsU3RvcmFnZURh
dGFiYXNlOjpjcmVhdGUoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcj4mJiB0cmFja2VyLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3Vy
aXR5T3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTG9jYWxTdG9yYWdlRGF0YWJhc2UoV1RGTW92ZShxdWV1ZSksIFdURk1vdmUodHJhY2tl
ciksIHNlY3VyaXR5T3JpZ2luLCBxdW90YUluQnl0ZXMpKTsKK30KKworTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OkxvY2FsU3RvcmFnZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJlZjxM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogICAgIDogbV9x
dWV1ZShXVEZNb3ZlKHF1ZXVlKSkKICAgICAsIG1fdHJhY2tlcihXVEZNb3ZlKHRyYWNrZXIpKQog
ICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKICAgICAsIG1fZGF0YWJhc2VQ
YXRoKG1fdHJhY2tlci0+ZGF0YWJhc2VQYXRoKG1fc2VjdXJpdHlPcmlnaW4pKQorICAgICwgbV9x
dW90YUluQnl0ZXMocXVvdGFJbkJ5dGVzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogfQpAQCAtNjYsMjQgKzc2LDI2IEBAIExvY2FsU3RvcmFnZURhdGFiYXNlOjp+TG9jYWxT
dG9yYWdlRGF0YWJhc2UoKQogICAgIEFTU0VSVChtX2lzQ2xvc2VkKTsKIH0KIAotdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9w
ZW5pbmdTdHJhdGVneSkKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShT
aG91bGRDcmVhdGVEYXRhYmFzZSBzaG91bGRDcmVhdGVEYXRhYmFzZSkKIHsKICAgICBBU1NFUlQo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIEFTU0VSVCghbV9mYWlsZWRUb09wZW5EYXRhYmFz
ZSk7CiAKLSAgICBpZiAoIXRyeVRvT3BlbkRhdGFiYXNlKG9wZW5pbmdTdHJhdGVneSkpIHsKKyAg
ICBpZiAoIXRyeVRvT3BlbkRhdGFiYXNlKHNob3VsZENyZWF0ZURhdGFiYXNlKSkgewogICAgICAg
ICBtX2ZhaWxlZFRvT3BlbkRhdGFiYXNlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICBtX3RyYWNrZXItPmRpZE9w
ZW5EYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7CisgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RyYWNrZXItPmRpZE9wZW5E
YXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7CiB9CiAKLWJvb2wgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9w
ZW5pbmdTdHJhdGVneSkKK2Jvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRyeVRvT3BlbkRhdGFi
YXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNob3VsZENyZWF0ZURhdGFiYXNlKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhtX2RhdGFiYXNlUGF0aCkgJiYgb3BlbmluZ1N0cmF0ZWd5ID09IFNraXBJZk5vbkV4aXN0ZW50
KQorICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkgJiYgc2hv
dWxkQ3JlYXRlRGF0YWJhc2UgPT0gU2hvdWxkQ3JlYXRlRGF0YWJhc2U6Ok5vKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChtX2RhdGFiYXNlUGF0aC5pc0VtcHR5KCkpIHsKQEAgLTE1
MywyMTMgKzE2NSwyMDkgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1U
YWJsZUlmTmVlZGVkKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKK0hhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtcygpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fZGlkSW1wb3J0SXRlbXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJ
ZiBpdCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3Vs
ZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVudGx5IGlnbm9y
aW5nIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKLQot
ICAgIC8vIFdlIHNldCB0aGlzIHRvIHRydWUgZXZlbiBpZiB3ZSBkb24ndCBlbmQgdXAgaW1wb3J0
aW5nIGFueSBpdGVtcyBkdWUgdG8gZmFpbHVyZSBiZWNhdXNlCi0gICAgLy8gdGhlcmUncyByZWFs
bHkgbm8gZ29vZCB3YXkgdG8gcmVjb3ZlciBvdGhlciB0aGFuIG5vdCBpbXBvcnRpbmcgYW55dGhp
bmcuCi0gICAgbV9kaWRJbXBvcnRJdGVtcyA9IHRydWU7Ci0KLSAgICBvcGVuRGF0YWJhc2UoU2tp
cElmTm9uRXhpc3RlbnQpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfc3RyKTsKLSAg
ICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBz
Y29wZWRTdGF0ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7
CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3Qg
aXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGl0ZW1zOwotCi0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICBpbnQgcmVz
dWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsK
LSAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIFN0
cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgU3Ry
aW5nIGtleSA9IHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUg
PSBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpOwogICAgICAgICBpZiAoIWtleS5pc051
bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICBpdGVtcy5hZGQoV1RGTW92ZShr
ZXkpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAg
ICAgICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9ET05FKSB7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciByZWFkaW5nIGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBzdG9yYWdlTWFwLmltcG9y
dEl0ZW1zKFdURk1vdmUoaXRlbXMpKTsKKyAgICByZXR1cm4gaXRlbXM7CiB9CiAKLXZvaWQgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpyZW1vdmVJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKQogewotICAgIGl0ZW1EaWRDaGFuZ2Uoa2V5LCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXkpCi17Ci0gICAgaXRlbURpZENoYW5nZShrZXksIFN0cmluZygpKTsKLX0KLQot
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQotewotICAgIG1fY2hhbmdlZEl0ZW1z
LmNsZWFyKCk7Ci0gICAgbV9zaG91bGRDbGVhckl0ZW1zID0gdHJ1ZTsKLQotICAgIHNjaGVkdWxl
RGF0YWJhc2VVcGRhdGUoKTsKLX0KKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQotewotICAg
IGlmIChtX2lzQ2xvc2VkKQorICAgIG9sZFZhbHVlID0gaXRlbShrZXkpOworICAgIGlmIChvbGRW
YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNDbG9zZWQgPSB0cnVlOwog
Ci0gICAgaWYgKG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkgewotICAgICAgICB1cGRhdGVE
YXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMobV9jaGFuZ2VkSXRlbXMpOwotICAgICAgICBtX2NoYW5n
ZWRJdGVtcy5jbGVhcigpOworICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gc2NvcGVkU3RhdGVt
ZW50KG1fZGVsZXRlSXRlbVN0YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBr
ZXk9PyJfcyk7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxv
Y2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBkZWxl
dGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSk7CiAKLSAgICBib29sIGlzRW1wdHkgPSBkYXRh
YmFzZUlzRW1wdHkoKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICBt
X2RhdGFiYXNlLmNsb3NlKCk7Ci0KLSAgICBpZiAoaXNFbXB0eSkKLSAgICAgICAgbV90cmFja2Vy
LT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7Ci19Ci0KLXZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1EaWRDaGFuZ2UoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9jaGFuZ2VkSXRlbXMuc2V0KGtleSwgdmFsdWUp
OwotICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6c2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpCi17Ci0gICAgaWYgKG1fZGlkU2NoZWR1
bGVEYXRhYmFzZVVwZGF0ZSkKKyAgICBpbnQgcmVzdWx0ID0gZGVsZXRlU3RhdGVtZW50LT5zdGVw
KCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBkZWxldGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVp
IiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghbV9kaXNhYmxl
U3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSkKLSAgICAgICAgbV9k
aXNhYmxlU3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSA9IG1ha2VV
bmlxdWU8U3VkZGVuVGVybWluYXRpb25EaXNhYmxlcj4oKTsKLQotICAgIG1fZGlkU2NoZWR1bGVE
YXRhYmFzZVVwZGF0ZSA9IHRydWU7Ci0KLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnVwZGF0ZURh
dGFiYXNlKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fZGF0YWJhc2VTaXplKSB7CisgICAgICAgIENo
ZWNrZWRVaW50NjQgZW50cnlTaXplID0gZXN0aW1hdGVFbnRyeVNpemUoa2V5LCBvbGRWYWx1ZSk7
CisgICAgICAgIGlmIChlbnRyeVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGVudHJ5U2l6ZS51bnNh
ZmVHZXQoKSA+PSAqbV9kYXRhYmFzZVNpemUpCisgICAgICAgICAgICAqbV9kYXRhYmFzZVNpemUg
PSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqbV9kYXRhYmFzZVNpemUgLT0gZW50cnlT
aXplLnVuc2FmZUdldCgpOworICAgIH0KIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
dXBkYXRlRGF0YWJhc2UoKQorU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdAogewotICAgIGlmIChtX2lzQ2xvc2VkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUgPSBmYWxzZTsKLQotICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNoYW5nZWRJdGVtczsKLSAgICBpZiAobV9jaGFuZ2VkSXRl
bXMuc2l6ZSgpIDw9IG1heGltdW1JdGVtc1RvVXBkYXRlKSB7Ci0gICAgICAgIC8vIFRoZXJlIGFy
ZSBmZXcgZW5vdWdoIGNoYW5nZWQgaXRlbXMgdGhhdCB3ZSBjYW4ganVzdCBhbHdheXMgd3JpdGUg
YWxsIG9mIHRoZW0uCi0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLnN3YXAoY2hhbmdlZEl0ZW1zKTsK
LSAgICAgICAgdXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNoYW5nZWRJdGVtcyk7Ci0g
ICAgICAgIG1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9Mb2NhbFN0b3Jh
Z2UgPSBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWF4aW11bUl0ZW1zVG9VcGRhdGU7ICsraSkgewotICAgICAgICAgICAgYXV0byBpdCA9IG1fY2hh
bmdlZEl0ZW1zLmJlZ2luKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkSXRlbXMuYWRkKGl0LT5rZXks
IGl0LT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShpdCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoY2hhbmdlZEl0ZW1zLnNpemUoKSA8PSBtYXhpbXVt
SXRlbXNUb1VwZGF0ZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgICAgIC8vIFJlc2NoZWR1bGUgdGhlIHVwZGF0ZSBmb3IgdGhlIHJl
bWFpbmluZyBpdGVtcy4KLSAgICAgICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgICAg
ICB1cGRhdGVEYXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMoY2hhbmdlZEl0ZW1zKTsKKyAgICBhdXRv
IHF1ZXJ5ID0gc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbVN0YXRlbWVudCwgIlNFTEVDVCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFxdWVyeSkgeworICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBxdWVyeS0+Ymlu
ZFRleHQoMSwga2V5KTsKKworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgIExPR19FUlJPUigiRXJyb3IgZ2V0IGl0
ZW0gZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5n
KDApOworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVw
ZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgY2hhbmdlZEl0ZW1zKQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9v
bCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAg
ICAgICBvcGVuRGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7CisgICAgICAgIG9wZW5EYXRh
YmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZTo6WWVzKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Nob3VsZENsZWFySXRlbXMpIHsK
LSAgICAgICAgbV9zaG91bGRDbGVhckl0ZW1zID0gZmFsc2U7Ci0KLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IGNsZWFyU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUi
KTsKLSAgICAgICAgaWYgKGNsZWFyU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
LSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50
IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICBpZiAobV9x
dW90YUluQnl0ZXMgIT0gV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9RdW90YSkgeworICAgICAgICBp
ZiAoIW1fZGF0YWJhc2VTaXplKQorICAgICAgICAgICAgbV9kYXRhYmFzZVNpemUgPSBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZGF0YWJhc2VQYXRoKTsKKyAgICAgICAg
aWYgKCptX2RhdGFiYXNlU2l6ZSA+PSBtX3F1b3RhSW5CeXRlcykgeworICAgICAgICAgICAgcXVv
dGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAg
ICAgICAgaW50IHJlc3VsdCA9IGNsZWFyU3RhdGVtZW50LnN0ZXAoKTsKLSAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1
bHQpOworICAgICAgICBDaGVja2VkVWludDY0IG5ld0RhdGFiYXNlU2l6ZSA9ICptX2RhdGFiYXNl
U2l6ZTsKKyAgICAgICAgbmV3RGF0YWJhc2VTaXplICs9IGVzdGltYXRlRW50cnlTaXplKGtleSwg
dmFsdWUpOworICAgICAgICBpZiAobmV3RGF0YWJhc2VTaXplLmhhc092ZXJmbG93ZWQoKSB8fCBu
ZXdEYXRhYmFzZVNpemUudW5zYWZlR2V0KCkgPiBtX3F1b3RhSW5CeXRlcykgeworICAgICAgICAg
ICAgcXVvdGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CisgICAgICAgIG1fZGF0YWJhc2VTaXplID0gbmV3RGF0YWJhc2VTaXplLnVuc2FmZUdldCgpOwog
ICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydFN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgb2xkVmFsdWUgPSBpdGVtKGtl
eSk7CisKKyAgICBhdXRvIGluc2VydFN0YXRlbWVudCA9IHNjb3BlZFN0YXRlbWVudChtX2luc2Vy
dFN0YXRlbWVudCwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIl9zKTsKKyAg
ICBpZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBw
cmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBk
YXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJF
IGtleT0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRlIHN0YXRlbWVu
dCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSk7CisgICAgaW5zZXJ0
U3RhdGVtZW50LT5iaW5kQmxvYigyLCB2YWx1ZSk7CisKKyAgICBpbnQgcmVzdWx0ID0gaW5zZXJ0
U3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2Ug
ZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fZGF0YWJhc2UudXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOworCisg
ICAgYXV0byBjbGVhclN0YXRlbWVudCA9IHNjb3BlZFN0YXRlbWVudChtX2NsZWFyU3RhdGVtZW50
LCAiREVMRVRFIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIWNsZWFyU3RhdGVtZW50KSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0g
Y2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgaW50IHJlc3VsdCA9IGNsZWFy
U3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGFuZ2VkSXRlbXMuYmVnaW4oKSwgZW5kID0gY2hh
bmdlZEl0ZW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gQSBudWxsIHZh
bHVlIG1lYW5zIHRoYXQgdGhlIGtleS92YWx1ZSBwYWlyIHNob3VsZCBiZSBkZWxldGVkLgotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCA9IGl0LT52YWx1ZS5pc051bGwoKSA/IGRl
bGV0ZVN0YXRlbWVudCA6IGluc2VydFN0YXRlbWVudDsKKyAgICBtX2RhdGFiYXNlU2l6ZSA9IDA7
CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgIHJldHVybiBt
X2RhdGFiYXNlLmxhc3RDaGFuZ2VzKCkgPiAwOworfQogCi0gICAgICAgIC8vIElmIHdlJ3JlIGlu
c2VydGluZyBhIGtleS92YWx1ZSBwYWlyLCBiaW5kIHRoZSB2YWx1ZSBhcyB3ZWxsLgotICAgICAg
ICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kQmxv
YigyLCBpdC0+dmFsdWUpOwordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQorewor
ICAgIGlmIChtX2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0Nsb3NlZCA9IHRy
dWU7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1
bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBib29sIGlzRW1wdHkgPSBk
YXRhYmFzZUlzRW1wdHkoKTsKIAotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKLSAgICB9Cisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
IAotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIG1fY2xlYXJTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1faW5zZXJ0U3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2dldEl0ZW1TdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0SXRlbXNTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fZGVsZXRlSXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CisKKyAgICBpZiAoaXNFbXB0eSkKKyAg
ICAgICAgbV90cmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdp
bik7CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpCiti
b29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogewogICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJ
dGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
IGF1dG8gY291bnRTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRh
YmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKGNvdW50
U3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJlc3VsdCA9
IHF1ZXJ5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gY291bnRTdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyBy
ZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2Nh
bCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4g
IXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1cm4gIWNvdW50U3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0
aW5nKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgb3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlOjpObyk7CisKKyAgICAvLyBQ
cmV3YXJtIHRoZSBnZXRJdGVtcyBzdGF0ZW1lbnQgZm9yIHBlcmZvcm1hbmNlIHNpbmNlIHRoZSBw
YWdlcyBibG9jayBzeW5jaHJvbm91c2x5IG9uIHJldHJpZXZpbmcgdGhlIGl0ZW1zLgorICAgIGlm
IChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBzY29wZWRTdGF0ZW1lbnQobV9nZXRJdGVt
c1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7Cit9CisKK1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1
bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgY29uc3QKK3sKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBzdGF0ZW1lbnQgPSBt
YWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOworICAgICAgICBB
U1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgeyB9OworICAgIH0KKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IDI0Y2UxNzQ2NGUxOS4uOTlmMTkwYWU5
MWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxNiArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFN0b3JhZ2VNYXA7
CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZTsKIGNsYXNzIFN1ZGRlblRlcm1p
bmF0aW9uRGlzYWJsZXI7CisKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtNDQsNTUgKzQyLDQ4IEBAIGNsYXNzIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjsKIAogY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TG9j
YWxTdG9yYWdlRGF0YWJhc2U+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
KTsKKyAgICBzdGF0aWMgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBjcmVhdGUoUmVmPFdvcmtR
dWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKICAgICB+TG9j
YWxTdG9yYWdlRGF0YWJhc2UoKTsKIAotICAgIC8vIFdpbGwgYmxvY2sgdW50aWwgdGhlIGltcG9y
dCBpcyBjb21wbGV0ZS4KLSAgICB2b2lkIGltcG9ydEl0ZW1zKFdlYkNvcmU6OlN0b3JhZ2VNYXAm
KTsKLQotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKLSAgICB2b2lk
IGNsZWFyKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlKCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsKKyAgICB2b2lkIG9wZW5JZkV4aXN0aW5nKCk7Cisg
ICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKTsK
KyAgICBib29sIGNsZWFyKCk7CisgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNv
bnN0OworICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOwogCiAgICAgLy8g
V2lsbCBibG9jayB1bnRpbCBhbGwgcGVuZGluZyBjaGFuZ2VzIGhhdmUgYmVlbiB3cml0dGVuIHRv
IGRpc2suCiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIExvY2FsU3RvcmFnZURh
dGFiYXNlKFJlZjxXb3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+
JiYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIExvY2FsU3RvcmFn
ZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI+JiYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVkIHF1b3Rh
SW5CeXRlcyk7CiAKLSAgICBlbnVtIERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IHsKLSAgICAgICAg
Q3JlYXRlSWZOb25FeGlzdGVudCwKLSAgICAgICAgU2tpcElmTm9uRXhpc3RlbnQKLSAgICB9Owot
ICAgIGJvb2wgdHJ5VG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kpOwotICAg
IHZvaWQgb3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5KTsKKyAgICBlbnVtIGNs
YXNzIFNob3VsZENyZWF0ZURhdGFiYXNlIDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICBib29sIHRy
eVRvT3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlKTsKKyAgICB2b2lkIG9wZW5EYXRh
YmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZSk7CiAKICAgICBib29sIG1pZ3JhdGVJdGVtVGFibGVJ
Zk5lZWRlZCgpOworICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCkgY29uc3Q7CiAKLSAgICB2b2lk
IGl0ZW1EaWRDaGFuZ2UoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
Ci0gICAgdm9pZCBzY2hlZHVsZURhdGFiYXNlVXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVEYXRh
YmFzZVdpdGhDaGFuZ2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKLQot
ICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCk7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7CiAKICAgICBSZWY8
V29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+
IG1fdHJhY2tlcjsKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgbV9zZWN1cml0eU9y
aWdpbjsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKLSAgICBXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZSBtX2RhdGFiYXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2Ug
bV9kYXRhYmFzZTsKKyAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlcyB7IDAgfTsKICAgICBib29s
IG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kaWRJbXBvcnRJ
dGVtcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKLQotICAgIGJv
b2wgbV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hv
dWxkQ2xlYXJJdGVtcyB7IGZhbHNlIH07Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9j
aGFuZ2VkSXRlbXM7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fZGF0YWJhc2VTaXplOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN1ZGRlblRlcm1pbmF0aW9uRGlzYWJsZXI+IG1f
ZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9Mb2NhbFN0b3JhZ2U7CisgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFy
U3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEl0ZW1TdGF0ZW1lbnQ7CisgICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEl0ZW1zU3Rh
dGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9kZWxldGVJdGVtU3RhdGVtZW50OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VO
YW1lc3BhY2UuY3BwCmluZGV4IDJkNDMxZDViOWJmZC4uNjAxNTNiZjdkNmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNzMsMTAgKzczLDggQEAgdm9pZCBMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHZvaWQgTG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2lu
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChhdXRvKiBzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpIHsKLSAgICAgICAgc3RvcmFn
ZUFyZWEtPnN5bmNUb0RhdGFiYXNlKCk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VBcmVhID0gbV9z
dG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNsb3NlKCk7
Ci0gICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCmluZGV4IDZhNzZkNzcwOTZjYi4uYzM0MTdhNDI5
ZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTdG9yYWdl
QXJlYU1hcE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKQEAgLTQwLDExICs0MSwxMiBAQCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFy
ZWEoTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UsIGNvbnN0IFNl
YwogICAgIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UobWFrZVdlYWtQdHIobG9jYWxTdG9yYWdl
TmFtZXNwYWNlKSkKICAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCiAgICAg
LCBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCi0gICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFn
ZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKSkKICAgICAsIG1faWRlbnRpZmllcihJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV9xdWV1ZShXVEZNb3ZlKHF1ZXVlKSkKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAg
ICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKIH0K
IAogU3RvcmFnZUFyZWE6On5TdG9yYWdlQXJlYSgpCkBAIC02MSw3ICs2Myw3IEBAIHZvaWQgU3Rv
cmFnZUFyZWE6OmFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlv
bklEKQogICAgIEFTU0VSVCghbV9ldmVudExpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uSUQp
KTsKIAogICAgIGlmIChtX2V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSAmJiAhaXNFcGhlbWVyYWwo
KSkKLSAgICAgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworICAgICAg
ICBlbnN1cmVEYXRhYmFzZSgpOwogCiAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoY29ubmVjdGlv
bklEKTsKIH0KQEAgLTc0LDExICs3Niw4IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUxpc3Rl
bmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKQogICAgIGlmICghbV9l
dmVudExpc3RlbmVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN5bmNUb0RhdGFi
YXNlKCk7Ci0gICAgbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnJlbW92ZVN0b3JhZ2VBcmVhKG1f
c2VjdXJpdHlPcmlnaW4pOworICAgIGlmIChtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKKyAgICAg
ICAgbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnJlbW92ZVN0b3JhZ2VBcmVhKG1fc2VjdXJpdHlP
cmlnaW4pOwogfQogCiBib29sIFN0b3JhZ2VBcmVhOjpoYXNMaXN0ZW5lcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCkgY29uc3QKQEAgLTEwMSw3NCArMTAwLDc1IEBAIHN0
ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNsb25lKCkgY29uc3QKIHZv
aWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VD
b25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAogICAg
IFN0cmluZyBvbGRWYWx1ZTsKLQotICAgIGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1h
cC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAgIGlm
IChuZXdTdG9yYWdlTWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3Jh
Z2VNYXApOworICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7CisgICAgICAgIGF1dG8gbmV3U3RvcmFn
ZU1hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFF
eGNlcHRpb24pOworICAgICAgICBpZiAobmV3U3RvcmFnZU1hcCkKKyAgICAgICAgICAgIG1fc3Rv
cmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7CisgICAgfSBlbHNlCisgICAgICAgIGVu
c3VyZURhdGFiYXNlKCkuc2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRp
b24pOwogCiAgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZS0+c2V0SXRlbShrZXksIHZhbHVlKTsKLQogICAgIGRpc3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5l
Y3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5n
KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFn
ZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJhc2VBbmRJ
bXBvcnRJdGVtc0lmTmVlZGVkKCk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgYXV0byBu
ZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwot
ICAgIGlmIChuZXdTdG9yYWdlTWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5l
d1N0b3JhZ2VNYXApOwotCisgICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgYXV0byBu
ZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwor
ICAgICAgICBpZiAobmV3U3RvcmFnZU1hcCkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdU
Rk1vdmUobmV3U3RvcmFnZU1hcCk7CisgICAgfSBlbHNlCisgICAgICAgIGVuc3VyZURhdGFiYXNl
KCkucmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKICAgICBpZiAob2xkVmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAg
ICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5yZW1vdmVJdGVtKGtleSk7Ci0KICAgICBkaXNw
YXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRW
YWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFy
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5k
SW1wb3J0SXRlbXNJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVh
dGUobV9xdW90YUluQnl0ZXMpOwogCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0g
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsZWFyKCk7CisgICAgaWYgKGlzRXBoZW1l
cmFsKCkpIHsKKyAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFw
LT5jbGVhcigpKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdl
TWFwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWVuc3VyZURhdGFiYXNlKCkuY2xlYXIo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBkaXNwYXRjaEV2ZW50cyhzb3Vy
Y2VDb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgdXJsU3RyaW5nKTsKIH0KIAotY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIFN0
b3JhZ2VBcmVhOjppdGVtcygpIGNvbnN0CitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTdG9yYWdl
QXJlYTo6aXRlbXMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKKyAgICBpZiAoaXNFcGhl
bWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKIAotICAgIHJl
dHVybiBtX3N0b3JhZ2VNYXAtPml0ZW1zKCk7CisgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNlKCku
aXRlbXMoKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0
ZShtX3F1b3RhSW5CeXRlcyk7Ci0KLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgewot
ICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOwotICAgICAgICBtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlID0gbnVsbHB0cjsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAg
ICAgICBpZiAoYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5jbGVhcigpKQorICAg
ICAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgeworICAgICAgICAgICAg
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xvc2UoKTsKKyAgICAgICAgICAgIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChhdXRv
IGl0ID0gbV9ldmVudExpc3RlbmVycy5iZWdpbigpLCBlbmQgPSBtX2V2ZW50TGlzdGVuZXJzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTE3OSwyMiArMTc5LDE3IEBAIHZvaWQgU3RvcmFn
ZUFyZWE6OmNsZWFyKCkKICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFz
ZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdAorTG9jYWxTdG9yYWdlRGF0YWJhc2UmIFN0
b3JhZ2VBcmVhOjplbnN1cmVEYXRhYmFzZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgaWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVCghaXNFcGhlbWVyYWwoKSk7CiAKICAgICBBU1NFUlQobV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPmxvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcigpKTsKICAgICAvLyBXZSBvcGVuIHRoZSBkYXRhYmFzZSBoZXJlIGV2ZW4gaWYgd2Un
dmUgYWxyZWFkeSBpbXBvcnRlZCBvdXIgaXRlbXMgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGFiYXNl
IGlzIG9wZW4gaWYgd2UgbmVlZCB0byB3cml0ZSB0byBpdC4KLSAgICBpZiAoIW1fbG9jYWxTdG9y
YWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6Y3JlYXRlKG1fcXVldWUuY29weVJlZigpLCAqbV9sb2NhbFN0b3JhZ2VOYW1l
c3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPmxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpLCBt
X3NlY3VyaXR5T3JpZ2luKTsKLQotICAgIGlmIChtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5pbXBvcnRJ
dGVtcygqbV9zdG9yYWdlTWFwKTsKLSAgICBtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlID0g
dHJ1ZTsKKyAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpIHsKKyAgICAgICAgbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSA9IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9xdWV1ZS5j
b3B5UmVmKCksICptX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKCksIG1fc2VjdXJpdHlPcmlnaW4sIG1fcXVvdGFJbkJ5
dGVzKTsKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+b3BlbklmRXhpc3RpbmcoKTsK
KyAgICB9CisgICAgcmV0dXJuICptX2xvY2FsU3RvcmFnZURhdGFiYXNlOwogfQogCiB2b2lkIFN0
b3JhZ2VBcmVhOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJj
ZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKQEAgLTIxMSwxNCArMjA2
LDYgQEAgdm9pZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG8KICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFy
ZWE6OnN5bmNUb0RhdGFiYXNlKCkKLXsKLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnVwZGF0ZURh
dGFiYXNlKCk7Ci19Ci0KIHZvaWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKIHsKICAgICBpZiAoIW1f
bG9jYWxTdG9yYWdlRGF0YWJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oCmluZGV4IDIxZDQ4NTk5Y2VkZC4uMzg4MDNk
NTY3OTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZUFyZWEuaApAQCAtNjMsMjggKzYzLDI2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOwogICAgIHZvaWQgY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBz
b3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZyk7CiAKLSAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMo
KSBjb25zdDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtcygpIGNvbnN0OwogICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgaXNFcGhlbWVyYWwoKSBjb25zdCB7IHJldHVybiAh
bV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7IH0KIAotICAgIHZvaWQgb3BlbkRhdGFiYXNlQW5kSW1w
b3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzeW5jVG9EYXRhYmFzZSgpOwog
ICAgIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKIAor
ICAgIExvY2FsU3RvcmFnZURhdGFiYXNlJiBlbnN1cmVEYXRhYmFzZSgpIGNvbnN0OworCiAgICAg
Ly8gV2lsbCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVsb25ncyB0byBhIHNlc3Npb24g
c3RvcmFnZSBuYW1lc3BhY2Ugb3IgdGhlIHN0b3JhZ2UgYXJlYSBpcyBpbiBhbiBlcGhlbWVyYWwg
c2Vzc2lvbi4KICAgICBXZWFrUHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U7CiAgICAgbXV0YWJsZSBSZWZQdHI8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IG1f
bG9jYWxTdG9yYWdlRGF0YWJhc2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZGlkSW1wb3J0SXRlbXNG
cm9tRGF0YWJhc2UgeyBmYWxzZSB9OwogCiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
IG1fc2VjdXJpdHlPcmlnaW47CiAgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAwIH07CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOworICAgIG11dGFi
bGUgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKICAgICBIYXNoU2V0
PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+IG1fZXZlbnRMaXN0ZW5lcnM7CiAKICAgICBJZGVu
dGlmaWVyIG1faWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCmluZGV4IDViZjY4
N2Y0OWY5My4uNjQ5OTgyODZlOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKQEAgLTE0
NywxMiArMTQ3LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2luZ0xv
Y2FsU3RvcmFnZUZpbmlzaGVkKCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgJnNlbWFwaG9yZV0gewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDog
bV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlQXJl
YSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZUFyZWEpCi0gICAgICAgICAgICAgICAgc3RvcmFn
ZUFyZWEtPnN5bmNUb0RhdGFiYXNlKCk7Ci0gICAgICAgIH0KKyAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbJnNlbWFwaG9yZV0gewogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7CiAg
ICAgc2VtYXBob3JlLndhaXQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427102</attachid>
            <date>2021-04-26 16:31:25 -0700</date>
            <delta_ts>2021-04-27 07:55:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225065-20210426163124.patch</filename>
            <type>text/plain</type>
            <size>41379</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU4YTg3ZThhODAxMjc1
ZDYxOTNlYjllZTA2ZmZmZmM1YjM3YTg0Yy4uNjYwNzlkYWMyM2E1YjIyNDA1NDc1NDk1ODk0YTJl
ZTc0M2JiOTgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2VlcCBsb2NhbCBz
dG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oOgor
ICAgICAgICBFeHBvcnQgYSBjb3VwbGUgbW9yZSBzeW1ib2xzLgorCisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNsZWFyKToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuaDoKKyAgICAgICAgQWRkIGEgY2xlYXIoKSBm
dW5jdGlvbiB0byBTdG9yYWdlTWFwIHNvIHRoYXQgU3RvcmFnZUFyZWEgZG9lc24ndCByZWNvbnN0
cnVjdCBhCisgICAgICAgIG5ldyBTdG9yYWdlTWFwIG9iamVjdCB1bm5lY2Vzc2FyaWx5IHdoZW46
CisgICAgICAgIC0gVGhlIFN0b3JhZ2VNYXAgaXMgbm90IHNoYXJlZAorICAgICAgICAtIFRoZSBT
dG9yYWdlTWFwIGlzIGVtcHR5IChhbmQgY2xlYXIoKSBpcyBhIG5vLW9wKQorCiAyMDIxLTA0LTI2
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZjb3VudCBT
dHlsZTo6UmVzb2x2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjE0ZDlhNDg4Y2IwOGE4NjMzZmY1NTQwNGU3ZGQz
NzJiMTUzZjZkNi4uMjNlMDBmMjNmMjIzNTg5YjgzZGZhYTZjNTlmYmM3NmMwZDJiOWJiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAyMS0wNC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFnZSBkYXRhIGluIG1l
bW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTA2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gYSBXZWJQYWdlIHdvdWxkIHN0YXJ0IHRvIHVzZSB0aGUg
bG9jYWwgc3RvcmFnZSBBUEksIHRoZSBXZWJQcm9jZXNzCisgICAgICAgIHdvdWxkIHNlbmQgYSBz
eW5jIElQQyB0byB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmV0cmlldmUgYWxsIHRoZSBsb2NhbAor
ICAgICAgICBzdG9yYWdlIGVudHJpZXMgZm9yIHRoZSBvcmlnaW4uIFRoZSBOZXR3b3JrUHJvY2Vz
cyB3b3VsZCByZWFkIHRob3NlCisgICAgICAgIGVudHJpZXMgZnJvbSBhIFNRTGl0ZSBkYXRhYmFz
ZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgIEJvdGggdGhl
IE5ldHdvcmtQcm9jZXNzIHdvdWxkIGtlZXAgdGhlIGVudHJpZXMgaW4gbWVtb3J5LCBpbiBhCisg
ICAgICAgIFN0b3JhZ2VNYXAgb2JqZWN0ICh3aGljaCBpcyBiYXNpY2FsbHkgYSBIYXNoTWFwKS4g
T24gc29tZSBzaXRlcywgdGhlCisgICAgICAgIHN0cmluZ3MgaW4gdGhlIGxvY2FsIHN0b3JhZ2Ug
bWF5IGJlIHZlcnkgbGFyZ2UuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlCisgICAgICAgIFdlYlByb2Nl
c3MgdG8ga2VlcCB0aGVtIGluIG1lbW9yeSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZXNwZWNp
YWxseQorICAgICAgICBjb25zaWRlcmluZyB0aGF0IHRoZSBXZWIgQVBJIGlzIHN5bmNocm9ub3Vz
LiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWFsCisgICAgICAgIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IG1lbW9yeSBpbiB0aGUgTmV0d29yayBQcm9jZXNzIHNpZGUsIGVzcGVjaWFsbHkKKyAgICAgICAg
Z2l2ZW4gdGhhdCB0aGUgV2ViUHJvY2VzcyBhbHJlYWR5IGhhcyBpdHMgb3duIGNvcHkuIE9uIHRo
ZSBuZXR3b3JrCisgICAgICAgIHByb2Nlc3Mgc2lkZSwgd2UgY2FuIGdldCByaWQgb2YgdGhlIFN0
b3JhZ2VNYXAgZW50aXJlbHkgaW4gdGhlIGxvY2FsCisgICAgICAgIHN0b3JhZ2UgY2FzZSBhbmQg
MTAwJSByZWx5IG9uIHRoZSBTUUxpdGUgZGF0YWJhc2UuIFRoaXMgaXMgd2hhdCB0aGlzCisgICAg
ICAgIHBhdGNoIGltcGxlbWVudHMuCisKKyAgICAgICAgQS9CIHRlc3Rpbmcgc2hvd3MgdGhpcyBp
cyBhIDItMyUgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyLiBUaGVyZSBkb2VzCisgICAgICAgIG5v
dCBhcHBlYXIgdG8gYmUgYSBtZWFuaW5nZnVsIHByb2dyZXNzaW9uIG9uIFBMVU0gc2FkbHkuIFRo
aXMgaXMgYWxzbworICAgICAgICBuZXV0cmFsIG9uIFBMVC4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojplc3RpbWF0ZUVudHJ5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURh
dGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
TG9jYWxTdG9yYWdlRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
aXRlbSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3Qp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuaDoKKyAgICAgICAgLSBVcGRhdGUgTG9jYWxTdG9yYWdlRGF0YWJhc2UgQVBJIHRvIG1hdGNo
IG1vcmUgY2xvc2VseSB0aGUgQVBJIG9mCisgICAgICAgICAgU3RvcmFnZU1hcC4gVGhpcyB3YXkg
U3RvcmFnZUFyZWEgY2FuIHJlbHkgb24gdGhlIExvY2FsU3RvcmFnZURhdGFiYXNlCisgICAgICAg
ICAgZW50aXJlbHkgaW5zdGVhZCBvZiB0aGUgU3RvcmFnZU1hcCB3aXRoIG1pbmltYWwgY2hhbmdl
cy4KKyAgICAgICAgLSBBZGQgcXVvdGEgc3VwcG9ydCBzaW1pbGFybHkgdG8gd2hhdCBpcyBkb25l
IGluIFN0b3JhZ2VBcmVhIHNvIHRoYXQKKyAgICAgICAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
c2V0SXRlbSgpIGZhaWxzIHdoZW4gdGhlIHF1b3RhIGlzIHJlYWNoZWQuCisgICAgICAgIC0gQ2Fj
aGUgdGhlIFNRTGl0ZVN0YXRlbWVudHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKToK
KyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBzeW5jVG9EYXRhYmFzZSgpIGJlZm9y
ZSBjbG9zaW5nIHNpbmNlCisgICAgICAgIExvY2FsU3RvcmFnZURhdGFiYXNlIG5vIGxvbmdlciBo
YXMgYSBxdWV1ZSBvbiBwZW5kaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmFkZExp
c3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjppdGVtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjplbnN1cmVEYXRhYmFzZSBjb25zdCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oOgorICAgICAgICBJ
ZiB0aGUgU3RvcmFnZUFyZWEgaXMgdXNlZCBmb3IgbG9jYWwgc3RvcmFnZSwgd2Ugbm93IGRvbid0
IGV2ZW4gaW5pdGlhbGl6ZQorICAgICAgICBhIFN0b3JhZ2VNYXAgYW5kIHJlbHkgZW50aXJlbHkg
b24gTG9jYWxTdG9yYWdlRGF0YWJhc2UuIElmIHRoZSBTdG9yYWdlQXJlYQorICAgICAgICBpcyB1
c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UsIHdlIGtlZXAgdXNpbmcgYSBTdG9yYWdlTWFwIHNpbmNl
IHRoZXJlIGlzIG5vCisgICAgICAgIGJhY2tpbmcgZGF0YWJhc2UuIFRoaXMgaXMgZmFpcmx5IHN0
cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIEkgdXBkYXRlZCB0aGUKKyAgICAgICAgTG9jYWxTdG9yYWdl
RGF0YWJhc2UgQVBJIHRvIG1hdGNoIGZhaXJseSBjbG9zZWx5IHRoZSBTdG9yYWdlTWFwIG9uZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKToKKwogMjAyMS0wNC0yNiAgUGVyIEFybmUgVm9sbGFuICA8
cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gVXBkYXRlIHNhbmRib3ggbWVzc2Fn
ZSBmaWx0ZXIgc3ludGF4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCmluZGV4IDg1ODgzZDNiMmQ1ZjliMzgy
ODYzNmJmMzVmNjdiMWVlYmE1NDFjZmQuLmI5NWVmY2MwYmI2MDcyMGQ0YzNhOTdjZGUyNzcyNTQ2
OWZjZDgxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDQt
MjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEb24ndCBrZWVw
IGxvY2FsIHN0b3JhZ2UgZGF0YSBpbiBtZW1vcnkgaW4gdGhlIE5ldHdvcmtQcm9jZXNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwNjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFN0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsOjpjbGVh
cik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxl
dGlvbik6CisgICAgICAgIFVzZSB0aGUgbmV3IFN0b3JhZ2VNYXA6OmNsZWFyKCkgdG8gYXZvaWQg
Y29uc3RydWN0aW5nIGEgbmV3IFN0b3JhZ2VNYXAgdW5uZWNlc3NhcmlseQorICAgICAgICB3aGVu
OgorICAgICAgICAtIFRoZSBTdG9yYWdlTWFwIGlzIG5vdCBzaGFyZWQKKyAgICAgICAgLSBUaGUg
U3RvcmFnZU1hcCBpcyBlbXB0eQorCiAyMDIxLTA0LTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVA
YXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgV2ViSURCU2VydmVyIG5vdCBibG9jayBtYWluIHRo
cmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggMzcyYjgxYmNlODNlNDBmZTgxZmFkZjcwZjM5N2UxZDNk
YzMwYTFhZC4uMzg2YjZhNzM3NDBmNmVhNGVmNjRmZWMyMjNhMzQyNmNiMGU2NjU4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9kYjsgfQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKIAotICAgIHZvaWQgdXBkYXRlTGFzdENo
YW5nZXNDb3VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFzdENoYW5nZXND
b3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBT
dHJpbmcmKTsKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmluZyYp
OwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRl
cnJ1cHQoKTsKIAogICAgIGludDY0X3QgbGFzdEluc2VydFJvd0lEKCk7Ci0gICAgaW50IGxhc3RD
aGFuZ2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxhc3RDaGFuZ2VzKCk7CiAKICAgICB2
b2lkIHNldEJ1c3lUaW1lb3V0KGludCBtcyk7CiAgICAgdm9pZCBzZXRCdXN5SGFuZGxlcihpbnQo
Kikodm9pZCosIGludCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmgKaW5kZXggZGRiZTIyMTBkYzVlZjg1MjIyNmNhNjlkNDkxNmNiMmUxMWUyMDIz
Ny4uOWZmOWU4ZjFmMTY1NGY4MmRiM2Q2NmFjNTZjODA2MGVjZWQ2MWQxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC04OSw3ICs4OSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUz
KiBkYXRhYmFzZSk7CiAjZW5kaWYKICAgICAKLSAgICBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFi
YXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGF0YWJh
c2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
CmluZGV4IGQ0N2M3MmIwNmVmZmFlNGMyNzY5Yjc2Mjc2YjMxNDFmYmQ2ZmRiNzYuLmE4NDE0OWUw
ZjEzN2QxOTVlZjU5NGZhNmM5MmQwZTBhMWY4ZDM0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTWFwLmNwcApAQCAtMTc1LDYgKzE3NSwxOCBAQCBSZWZQdHI8U3RvcmFnZU1hcD4gU3Rv
cmFnZU1hcDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiBvbGRWYWx1ZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6
OmNsZWFyKCkKK3sKKyAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13cml0ZSBzZW1hbnRpY3MgaGVy
ZS4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVs
b25nIHRvIFN0b3JhZ2Ugb2JqZWN0cworICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFn
ZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCisgICAg
aWYgKHJlZkNvdW50KCkgPiAxICYmICFtX21hcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBT
dG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YVNpemUpOworCisgICAgbV9tYXAuY2xlYXIoKTsKKyAg
ICBtX2N1cnJlbnRMZW5ndGggPSAwOworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIFN0
b3JhZ2VNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewogICAgIHJldHVy
biBtX21hcC5jb250YWlucyhrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaAppbmRl
eCA0ZWE5ZTc4OTZjYWZhNzY5OTBlNTkwYzhiOTVkMzcxNDczMjBiMTljLi4yMmU5NzViOWNmZGY0
ZWVmNzY1ZjkxMjc0ZTEzZGZlMDk2ZTI4MTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VN
YXAuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxTdG9yYWdlTWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgb2xkVmFsdWUp
OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBjbGVhcigpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IDAyYzg2NzNkMzliMWI2ODI2NjJh
NzdlZDFjNjE2NmQ5NzFhNjJmNDQuLmY5ZmJmODFiOWU3ZjdhMWI4MzRjOTQwODQyNmEyMGY5N2Y2
MDc5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNywzNSArMjcsNDUgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZS5o
IgogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU3VkZGVuVGVybWluYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAot
c3RhdGljIGNvbnN0IGF1dG8gZGF0YWJhc2VVcGRhdGVJbnRlcnZhbCA9IDFfczsKLQotc3RhdGlj
IGNvbnN0IGludCBtYXhpbXVtSXRlbXNUb1VwZGF0ZSA9IDEwMDsKLQogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPExvY2FsU3RvcmFnZURhdGFiYXNl
PiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJl
ZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyBjb25zdCBjaGFyIGdldEl0ZW1zUXVl
cnlTdHJpbmdbXSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSI7CisKK3N0YXRp
YyBDaGVja2VkVWludDY0IGVzdGltYXRlRW50cnlTaXplKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExvY2FsU3RvcmFn
ZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRyYWNrZXIpLCBzZWN1cml0eU9yaWdp
bikpOworICAgIENoZWNrZWRVaW50NjQgZW50cnlTaXplOworICAgIGVudHJ5U2l6ZSArPSBrZXku
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgIGVudHJ5U2l6ZSArPSB2YWx1ZS5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhcik7CisgICAgcmV0dXJuIGVudHJ5U2l6ZTsKIH0KIAotTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OkxvY2FsU3RvcmFnZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUs
IFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK1JlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwg
V1RGTW92ZSh0cmFja2VyKSwgc2VjdXJpdHlPcmlnaW4sIHF1b3RhSW5CeXRlcykpOworfQorCitM
b2NhbFN0b3JhZ2VEYXRhYmFzZTo6TG9jYWxTdG9yYWdlRGF0YWJhc2UoUmVmPFdvcmtRdWV1ZT4m
JiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiB0cmFja2VyLCBjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0
ZXMpCiAgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogICAgICwgbV90cmFja2VyKFdURk1v
dmUodHJhY2tlcikpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKQogICAg
ICwgbV9kYXRhYmFzZVBhdGgobV90cmFja2VyLT5kYXRhYmFzZVBhdGgobV9zZWN1cml0eU9yaWdp
bikpCisgICAgLCBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC02NiwxMiArNzYsMTIgQEAgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiAgICAgQVNTRVJUKG1faXNDbG9zZWQpOwog
fQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVu
aW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
b3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNob3VsZENyZWF0ZURhdGFiYXNlKQog
ewogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgQVNTRVJUKCFtX2ZhaWxl
ZFRvT3BlbkRhdGFiYXNlKTsKIAotICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uob3BlbmluZ1N0
cmF0ZWd5KSkgeworICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uoc2hvdWxkQ3JlYXRlRGF0YWJh
c2UpKSB7CiAgICAgICAgIG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtODAsMTAgKzkwLDEwIEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6Om9wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kp
CiAgICAgICAgIG1fdHJhY2tlci0+ZGlkT3BlbkRhdGFiYXNlV2l0aE9yaWdpbihtX3NlY3VyaXR5
T3JpZ2luKTsKIH0KIAotYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJh
c2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQorYm9vbCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hv
dWxkQ3JlYXRlRGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBvcGVuaW5n
U3RyYXRlZ3kgPT0gU2tpcElmTm9uRXhpc3RlbnQpCisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRDcmVhdGVEYXRhYmFzZSA9PSBTaG91bGRD
cmVhdGVEYXRhYmFzZTo6Tm8pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fZGF0
YWJhc2VQYXRoLmlzRW1wdHkoKSkgewpAQCAtMTUzLDIxMyArMTYzLDIwNyBAQCBib29sIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdl
TWFwJiBzdG9yYWdlTWFwKQorSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zKCkgY29uc3QKIHsKLSAgICBpZiAobV9kaWRJbXBvcnRJdGVtcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IElmIGl0IGNhbid0IGltcG9ydCwgdGhlbiB0aGUg
ZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2lu
ZywKLSAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAotCi0gICAgLy8gV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBl
dmVuIGlmIHdlIGRvbid0IGVuZCB1cCBpbXBvcnRpbmcgYW55IGl0ZW1zIGR1ZSB0byBmYWlsdXJl
IGJlY2F1c2UKLSAgICAvLyB0aGVyZSdzIHJlYWxseSBubyBnb29kIHdheSB0byByZWNvdmVyIG90
aGVyIHRoYW4gbm90IGltcG9ydGluZyBhbnl0aGluZy4KLSAgICBtX2RpZEltcG9ydEl0ZW1zID0g
dHJ1ZTsKLQotICAgIG9wZW5EYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7CiAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZh
bHVlIEZST00gSXRlbVRhYmxlIl9zdHIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9IHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3Rh
dGVtZW50LCBnZXRJdGVtc1F1ZXJ5U3RyaW5nKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7Ci0KLSAgICBpbnQgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdo
aWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcga2V5ID0gcXVlcnku
Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcXVlcnkuZ2V0Q29sdW1u
QmxvYkFzU3RyaW5nKDEpOworICAgICAgICBTdHJpbmcga2V5ID0gcXVlcnktPmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJp
bmcoMSk7CiAgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1ZS5pc051bGwoKSkKICAg
ICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKLSAgICAg
ICAgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgp
OwogICAgIH0KIAotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRl
bXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIHN0b3JhZ2VNYXAuaW1wb3J0SXRlbXMoV1RGTW92ZShpdGVtcykpOworICAg
IHJldHVybiBpdGVtczsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUp
CiB7Ci0gICAgaXRlbURpZENoYW5nZShrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBpdGVtRGlk
Q2hhbmdlKGtleSwgU3RyaW5nKCkpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpj
bGVhcigpCi17Ci0gICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKLSAgICBtX3Nob3VsZENsZWFy
SXRlbXMgPSB0cnVlOwotCi0gICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotfQorICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIExvY2FsU3Rv
cmFnZURhdGFiYXNlOjpjbG9zZSgpCi17Ci0gICAgaWYgKG1faXNDbG9zZWQpCisgICAgb2xkVmFs
dWUgPSBpdGVtKGtleSk7CisgICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKLSAgICBpZiAobV9kaWRTY2hlZHVsZURhdGFi
YXNlVXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhtX2No
YW5nZWRJdGVtcyk7Ci0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7CisgICAgYXV0byBk
ZWxldGVTdGF0ZW1lbnQgPSBzY29wZWRTdGF0ZW1lbnQobV9kZWxldGVJdGVtU3RhdGVtZW50LCAi
REVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVN0
YXRlbWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBz
dGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5
KTsKIAotICAgIGJvb2wgaXNFbXB0eSA9IGRhdGFiYXNlSXNFbXB0eSgpOwotCi0gICAgaWYgKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLQotICAgIGlm
IChpc0VtcHR5KQotICAgICAgICBtX3RyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbiht
X3NlY3VyaXR5T3JpZ2luKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbURp
ZENoYW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBt
X2NoYW5nZWRJdGVtcy5zZXQoa2V5LCB2YWx1ZSk7Ci0gICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0
ZSgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY2hlZHVsZURhdGFiYXNlVXBk
YXRlKCkKLXsKLSAgICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKQorICAgIGludCBy
ZXN1bHQgPSBkZWxldGVTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtIGluIHRo
ZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKCFtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxlV3JpdGlu
Z1RvTG9jYWxTdG9yYWdlKQotICAgICAgICBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxl
V3JpdGluZ1RvTG9jYWxTdG9yYWdlID0gbWFrZVVuaXF1ZTxTdWRkZW5UZXJtaW5hdGlvbkRpc2Fi
bGVyPigpOwotCi0gICAgbV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlID0gdHJ1ZTsKLQotICAg
IG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+dXBkYXRlRGF0YWJhc2UoKTsKLSAgICB9KTsKKyAgICBpZiAo
bV9kYXRhYmFzZVNpemUpIHsKKyAgICAgICAgQ2hlY2tlZFVpbnQ2NCBlbnRyeVNpemUgPSBlc3Rp
bWF0ZUVudHJ5U2l6ZShrZXksIG9sZFZhbHVlKTsKKyAgICAgICAgaWYgKGVudHJ5U2l6ZS5oYXNP
dmVyZmxvd2VkKCkgfHwgZW50cnlTaXplLnVuc2FmZUdldCgpID49ICptX2RhdGFiYXNlU2l6ZSkK
KyAgICAgICAgICAgICptX2RhdGFiYXNlU2l6ZSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICptX2RhdGFiYXNlU2l6ZSAtPSBlbnRyeVNpemUudW5zYWZlR2V0KCk7CisgICAgfQogfQog
Ci12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZSgpCitTdHJpbmcgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7Ci0gICAg
aWYgKG1faXNDbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlkU2NoZWR1bGVEYXRh
YmFzZVVwZGF0ZSA9IGZhbHNlOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY2hhbmdl
ZEl0ZW1zOwotICAgIGlmIChtX2NoYW5nZWRJdGVtcy5zaXplKCkgPD0gbWF4aW11bUl0ZW1zVG9V
cGRhdGUpIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIGZldyBlbm91Z2ggY2hhbmdlZCBpdGVtcyB0
aGF0IHdlIGNhbiBqdXN0IGFsd2F5cyB3cml0ZSBhbGwgb2YgdGhlbS4KLSAgICAgICAgbV9jaGFu
Z2VkSXRlbXMuc3dhcChjaGFuZ2VkSXRlbXMpOwotICAgICAgICB1cGRhdGVEYXRhYmFzZVdpdGhD
aGFuZ2VkSXRlbXMoY2hhbmdlZEl0ZW1zKTsKLSAgICAgICAgbV9kaXNhYmxlU3VkZGVuVGVybWlu
YXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhpbXVtSXRlbXNUb1VwZGF0ZTsgKytpKSB7
Ci0gICAgICAgICAgICBhdXRvIGl0ID0gbV9jaGFuZ2VkSXRlbXMuYmVnaW4oKTsKLSAgICAgICAg
ICAgIGNoYW5nZWRJdGVtcy5hZGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKLQotICAgICAgICAgICAg
bV9jaGFuZ2VkSXRlbXMucmVtb3ZlKGl0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChj
aGFuZ2VkSXRlbXMuc2l6ZSgpIDw9IG1heGltdW1JdGVtc1RvVXBkYXRlKTsKKyAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgLy8gUmVz
Y2hlZHVsZSB0aGUgdXBkYXRlIGZvciB0aGUgcmVtYWluaW5nIGl0ZW1zLgotICAgICAgICBzY2hl
ZHVsZURhdGFiYXNlVXBkYXRlKCk7Ci0gICAgICAgIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJ
dGVtcyhjaGFuZ2VkSXRlbXMpOworICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1lbnQobV9n
ZXRJdGVtU3RhdGVtZW50LCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/
Il9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdl
dCBpdGVtIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQorICAgIHF1ZXJ5LT5iaW5kVGV4dCgxLCBrZXkpOworCisgICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwg
c3RvcmFnZSIpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjaGFuZ2VkSXRlbXMpCit2b2lkIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBTdHJpbmcmIG9sZFZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG9wZW5EYXRhYmFzZShDcmVhdGVJZk5v
bkV4aXN0ZW50KTsKKyAgICAgICAgb3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlOjpZ
ZXMpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fc2hvdWxkQ2xlYXJJdGVtcykgewotICAgICAgICBtX3Nob3VsZENsZWFySXRlbXMg
PSBmYWxzZTsKLQotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXJTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOworICAgIGlmIChtX3F1b3RhSW5CeXRlcyAhPSBXZWJDb3JlOjpTdG9y
YWdlTWFwOjpub1F1b3RhKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZVNpemUpCisgICAgICAg
ICAgICBtX2RhdGFiYXNlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNp
emUobV9kYXRhYmFzZVBhdGgpOworICAgICAgICBpZiAoKm1fZGF0YWJhc2VTaXplID49IG1fcXVv
dGFJbkJ5dGVzKSB7CisgICAgICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXJTdGF0
ZW1lbnQuc3RlcCgpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2Fs
IHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CisgICAgICAgIENoZWNrZWRVaW50NjQg
bmV3RGF0YWJhc2VTaXplID0gKm1fZGF0YWJhc2VTaXplOworICAgICAgICBuZXdEYXRhYmFzZVNp
emUgKz0gZXN0aW1hdGVFbnRyeVNpemUoa2V5LCB2YWx1ZSk7CisgICAgICAgIGlmIChuZXdEYXRh
YmFzZVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IG5ld0RhdGFiYXNlU2l6ZS51bnNhZmVHZXQoKSA+
IG1fcXVvdGFJbkJ5dGVzKSB7CisgICAgICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRydWU7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kYXRhYmFzZVNpemUgPSBu
ZXdEYXRhYmFzZVNpemUudW5zYWZlR2V0KCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluc2VydFN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVF
UyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBvbGRWYWx1ZSA9IGl0ZW0oa2V5KTsKKworICAgIGF1dG8gaW5zZXJ0U3RhdGVt
ZW50ID0gc2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0U3RhdGVtZW50LCAiSU5TRVJUIElOVE8gSXRl
bVRhYmxlIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50KSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNh
bm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAgICBpZiAoZGVsZXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJuOworICAgIGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMSwga2V5KTsKKyAgICBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVl
KTsKKworICAgIGludCByZXN1bHQgPSBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRh
dGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKK30K
KworYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQoreworICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjbGVhclN0
YXRlbWVudCA9IHNjb3BlZFN0YXRlbWVudChtX2NsZWFyU3RhdGVtZW50LCAiREVMRVRFIEZST00g
SXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIWNsZWFyU3RhdGVtZW50KSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CisgICAgaW50IHJlc3VsdCA9IGNsZWFyU3RhdGVtZW50LT5zdGVw
KCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
LSAlaSIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBmb3Ig
KGF1dG8gaXQgPSBjaGFuZ2VkSXRlbXMuYmVnaW4oKSwgZW5kID0gY2hhbmdlZEl0ZW1zLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gQSBudWxsIHZhbHVlIG1lYW5zIHRoYXQg
dGhlIGtleS92YWx1ZSBwYWlyIHNob3VsZCBiZSBkZWxldGVkLgotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQmIHN0YXRlbWVudCA9IGl0LT52YWx1ZS5pc051bGwoKSA/IGRlbGV0ZVN0YXRlbWVudCA6
IGluc2VydFN0YXRlbWVudDsKKyAgICBtX2RhdGFiYXNlU2l6ZSA9IDA7CiAKLSAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgIHJldHVybiBtX2RhdGFiYXNlLmxhc3RD
aGFuZ2VzKCkgPiAwOworfQogCi0gICAgICAgIC8vIElmIHdlJ3JlIGluc2VydGluZyBhIGtleS92
YWx1ZSBwYWlyLCBiaW5kIHRoZSB2YWx1ZSBhcyB3ZWxsLgotICAgICAgICBpZiAoIWl0LT52YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kQmxvYigyLCBpdC0+dmFsdWUp
Owordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQoreworICAgIGlmIChtX2lzQ2xv
c2VkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKLSAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVt
IGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBib29sIGlzRW1wdHkgPSBkYXRhYmFzZUlzRW1wdHko
KTsKIAotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKLSAgICB9CisgICAgbV9jbGVhclN0YXRl
bWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1f
Z2V0SXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9nZXRJdGVtc1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9kZWxldGVJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsKIAotICAgIHRyYW5z
YWN0aW9uLmNvbW1pdCgpOworICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBt
X2RhdGFiYXNlLmNsb3NlKCk7CisKKyAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgbV90cmFja2Vy
LT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7CiB9CiAKLWJvb2wg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpCitib29sIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogewogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsKLSAg
ICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gY291bnRTdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKGNvdW50U3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50
IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsK
KyAgICBpbnQgcmVzdWx0ID0gY291bnRTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291
bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVt
bkludCgwKTsKKyAgICByZXR1cm4gIWNvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7Cit9
CisKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKK3sKKyAgICBp
ZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgb3BlbkRhdGFi
YXNlKFNob3VsZENyZWF0ZURhdGFiYXNlOjpObyk7CisKKyAgICAvLyBQcmV3YXJtIHRoZSBnZXRJ
dGVtcyBzdGF0ZW1lbnQgZm9yIHBlcmZvcm1hbmNlIHNpbmNlIHRoZSBwYWdlcyBibG9jayBzeW5j
aHJvbm91c2x5IG9uIHJldHJpZXZpbmcgdGhlIGl0ZW1zLgorICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICBzY29wZWRTdGF0ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0
SXRlbXNRdWVyeVN0cmluZyk7Cit9CisKK1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNRTGl0
ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3QKK3sKKyAg
ICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOworICAgICAgICBBU1NFUlQobV9kYXRhYmFz
ZS5pc09wZW4oKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9
OworICAgIH0KKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0
ZW1lbnQuZ2V0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oCmluZGV4IDI0Y2UxNzQ2NGUxOWM3OTk5YmQ2ODRiN2FiNjI5Njc2NGQyZjVl
OWEuLjk5ZjE5MGFlOTFjMTVhMDU0NTYwMDAwYTk2OTM4MzA0MzUzNGNkNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMywgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwxNCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU3RvcmFnZU1hcDsKK2NsYXNzIFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlOwogY2xhc3MgU3VkZGVuVGVybWluYXRpb25EaXNhYmxlcjsK
Kworc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC00NCw1NSArNDIsNDggQEAgY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOwogCiBj
bGFzcyBMb2NhbFN0b3JhZ2VEYXRhYmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPExvY2FsU3RvcmFn
ZURhdGFiYXNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZT4gY3JlYXRlKFJlZjxXb3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI+JiYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIHN0YXRpYyBS
ZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwogICAgIH5Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZSgpOwogCi0gICAgLy8gV2lsbCBibG9jayB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLgot
ICAgIHZvaWQgaW1wb3J0SXRlbXMoV2ViQ29yZTo6U3RvcmFnZU1hcCYpOwotCi0gICAgdm9pZCBz
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lk
IHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpOwotICAgIHZvaWQgY2xlYXIoKTsKLQotICAg
IHZvaWQgdXBkYXRlRGF0YWJhc2UoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVt
cygpIGNvbnN0OworICAgIHZvaWQgb3BlbklmRXhpc3RpbmcoKTsKKyAgICB2b2lkIHJlbW92ZUl0
ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpOworICAgIGJvb2wgY2xlYXIo
KTsKKyAgICBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CisgICAgdm9pZCBz
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBTdHJpbmcmIG9s
ZFZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbik7CiAKICAgICAvLyBXaWxsIGJsb2NrIHVudGls
IGFsbCBwZW5kaW5nIGNoYW5nZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gZGlzay4KICAgICB2b2lk
IGNsb3NlKCk7CiAKIHByaXZhdGU6Ci0gICAgTG9jYWxTdG9yYWdlRGF0YWJhc2UoUmVmPFdvcmtR
dWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJik7CisgICAgTG9jYWxTdG9yYWdlRGF0YWJhc2UoUmVmPFdv
cmtRdWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKIAotICAg
IGVudW0gRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgewotICAgICAgICBDcmVhdGVJZk5vbkV4aXN0
ZW50LAotICAgICAgICBTa2lwSWZOb25FeGlzdGVudAotICAgIH07Ci0gICAgYm9vbCB0cnlUb09w
ZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7Ci0gICAgdm9pZCBvcGVuRGF0YWJh
c2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kpOworICAgIGVudW0gY2xhc3MgU2hvdWxkQ3JlYXRl
RGF0YWJhc2UgOiBib29sIHsgTm8sIFllcyB9OworICAgIGJvb2wgdHJ5VG9PcGVuRGF0YWJhc2Uo
U2hvdWxkQ3JlYXRlRGF0YWJhc2UpOworICAgIHZvaWQgb3BlbkRhdGFiYXNlKFNob3VsZENyZWF0
ZURhdGFiYXNlKTsKIAogICAgIGJvb2wgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7CisgICAg
Ym9vbCBkYXRhYmFzZUlzRW1wdHkoKSBjb25zdDsKIAotICAgIHZvaWQgaXRlbURpZENoYW5nZShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2b2lkIHNjaGVk
dWxlRGF0YWJhc2VVcGRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJ
dGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOwotCi0gICAgYm9vbCBkYXRhYmFz
ZUlzRW1wdHkoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBz
Y29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4m
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdDsKIAogICAgIFJlZjxXb3JrUXVldWU+IG1fcXVl
dWU7CiAgICAgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4gbV90cmFja2VyOwogICAg
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBtX3NlY3VyaXR5T3JpZ2luOwogCiAgICAgU3Ry
aW5nIG1fZGF0YWJhc2VQYXRoOwotICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJh
c2U7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworICAg
IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9OwogICAgIGJvb2wgbV9mYWlsZWRUb09wZW5E
YXRhYmFzZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RpZEltcG9ydEl0ZW1zIHsgZmFsc2UgfTsK
ICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwotCi0gICAgYm9vbCBtX2RpZFNjaGVkdWxl
RGF0YWJhc2VVcGRhdGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRDbGVhckl0ZW1zIHsg
ZmFsc2UgfTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2NoYW5nZWRJdGVtczsKKyAg
ICBPcHRpb25hbDx1aW50NjRfdD4gbV9kYXRhYmFzZVNpemU7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U3VkZGVuVGVybWluYXRpb25EaXNhYmxlcj4gbV9kaXNhYmxlU3VkZGVuVGVy
bWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZTsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJTdGF0ZW1lbnQ7CisgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2Vy
dFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fZ2V0SXRlbVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0SXRlbXNTdGF0ZW1lbnQ7CisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RlbGV0ZUl0
ZW1TdGF0ZW1lbnQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKaW5k
ZXggMmQ0MzFkNWI5YmZkNjVhNzczMDMxODMwODNmNjMxMzhlZmMzNTc0OS4uNjAxNTNiZjdkNmIw
N2Y1OGUwZWExNTk1YTE0ZmM4YzgxMzUzYzE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVz
cGFjZS5jcHAKQEAgLTczLDEwICs3Myw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpj
bGVhckFsbFN0b3JhZ2VBcmVhcygpCiB2b2lkIExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Zmx1c2hB
bmRDbG9zZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmdldChvcmlnaW4pKSB7Ci0gICAgICAgIHN0b3JhZ2VBcmVhLT5zeW5jVG9EYXRh
YmFzZSgpOworICAgIGlmIChhdXRvKiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0
KG9yaWdpbikpCiAgICAgICAgIHN0b3JhZ2VBcmVhLT5jbG9zZSgpOwotICAgIH0KIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhLmNwcAppbmRleCA2YTc2ZDc3MDk2Y2IyYTM0YWU5OGQ3ZjcwMzFjMDI5ZjhjODI4OGQx
Li5jMzQxN2E0MjllYmMzZGJhN2QzMGIzNzk1ZDAwMTQzYmE4MTVlOTkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAg
LTQwLDExICs0MSwxMiBAQCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UsIGNvbnN0IFNlYwogICAgIDogbV9sb2NhbFN0
b3JhZ2VOYW1lc3BhY2UobWFrZVdlYWtQdHIobG9jYWxTdG9yYWdlTmFtZXNwYWNlKSkKICAgICAs
IG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCiAgICAgLCBtX3F1b3RhSW5CeXRlcyhx
dW90YUluQnl0ZXMpCi0gICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVv
dGFJbkJ5dGVzKSkKICAgICAsIG1faWRlbnRpZmllcihJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQog
ICAgICwgbV9xdWV1ZShXVEZNb3ZlKHF1ZXVlKSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0g
U3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKIH0KIAogU3RvcmFnZUFyZWE6On5T
dG9yYWdlQXJlYSgpCkBAIC02MSw3ICs2Myw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmFkZExpc3Rl
bmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKQogICAgIEFTU0VSVCgh
bV9ldmVudExpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uSUQpKTsKIAogICAgIGlmIChtX2V2
ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSAmJiAhaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgb3BlbkRh
dGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworICAgICAgICBlbnN1cmVEYXRhYmFzZSgp
OwogCiAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoY29ubmVjdGlvbklEKTsKIH0KQEAgLTc0LDEx
ICs3Niw4IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKQogICAgIGlmICghbV9ldmVudExpc3RlbmVycy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN5bmNUb0RhdGFiYXNlKCk7Ci0gICAgbV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnJlbW92ZVN0b3JhZ2VBcmVhKG1fc2VjdXJpdHlPcmlnaW4pOwor
ICAgIGlmIChtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VO
YW1lc3BhY2UtPnJlbW92ZVN0b3JhZ2VBcmVhKG1fc2VjdXJpdHlPcmlnaW4pOwogfQogCiBib29s
IFN0b3JhZ2VBcmVhOjpoYXNMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb25JRCkgY29uc3QKQEAgLTEwMSw3NCArMTAwLDc1IEBAIHN0ZDo6dW5pcXVlX3B0cjxTdG9y
YWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNsb25lKCkgY29uc3QKIHZvaWQgU3RvcmFnZUFyZWE6OnNl
dEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGJvb2wmIHF1b3Rh
RXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5E
YXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsK
LQotICAgIGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZh
bHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAgIGlmIChuZXdTdG9yYWdlTWFwKQot
ICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAgIGlmIChp
c0VwaGVtZXJhbCgpKSB7CisgICAgICAgIGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1h
cC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworICAgICAg
ICBpZiAobmV3U3RvcmFnZU1hcCkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUo
bmV3U3RvcmFnZU1hcCk7CisgICAgfSBlbHNlCisgICAgICAgIGVuc3VyZURhdGFiYXNlKCkuc2V0
SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogCiAgICAgaWYgKHF1
b3RhRXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+c2V0SXRlbShrZXksIHZh
bHVlKTsKLQogICAgIGRpc3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVh
SW1wbElELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5nKTsKIH0KIAogdm9pZCBTdG9y
YWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5l
Y3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVk
KCk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9z
dG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgIGlmIChuZXdTdG9yYWdl
TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOwotCisg
ICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9z
dG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgICAgICBpZiAobmV3U3Rv
cmFnZU1hcCkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1h
cCk7CisgICAgfSBlbHNlCisgICAgICAgIGVuc3VyZURhdGFiYXNlKCkucmVtb3ZlSXRlbShrZXks
IG9sZFZhbHVlKTsKICAgICBpZiAob2xkVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlLT5yZW1vdmVJdGVtKGtleSk7Ci0KICAgICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VD
b25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVy
bFN0cmluZyk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9y
YWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRl
ZCgpOwotCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMp
OwogCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2UtPmNsZWFyKCk7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAg
aWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5jbGVhcigpKQorICAgICAg
ICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWVuc3VyZURhdGFiYXNlKCkuY2xlYXIoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBzdG9y
YWdlQXJlYUltcGxJRCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsK
IH0KIAotY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIFN0b3JhZ2VBcmVhOjppdGVtcygp
IGNvbnN0CitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTdG9yYWdlQXJlYTo6aXRlbXMoKSBjb25z
dAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5EYXRhYmFzZUFu
ZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKIAotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAt
Pml0ZW1zKCk7CisgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNlKCkuaXRlbXMoKTsKIH0KIAogdm9p
ZCBTdG9yYWdlQXJlYTo6Y2xlYXIoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7
Ci0KLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgewotICAgICAgICBtX2xvY2FsU3Rv
cmFnZURhdGFiYXNlLT5jbG9zZSgpOwotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlID0g
bnVsbHB0cjsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBpZiAoYXV0byBuZXdT
dG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5jbGVhcigpKQorICAgICAgICAgICAgbV9zdG9yYWdl
TWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgeworICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZS0+Y2xvc2UoKTsKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBudWxs
cHRyOworICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChhdXRvIGl0ID0gbV9ldmVudExpc3Rl
bmVycy5iZWdpbigpLCBlbmQgPSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKQEAgLTE3OSwyMiArMTc5LDE3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKCkKICAg
ICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZO
ZWVkZWQoKSBjb25zdAorTG9jYWxTdG9yYWdlRGF0YWJhc2UmIFN0b3JhZ2VBcmVhOjplbnN1cmVE
YXRhYmFzZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
aWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VCghaXNFcGhlbWVyYWwoKSk7CiAKICAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2Ut
PnN0b3JhZ2VNYW5hZ2VyKCktPmxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpKTsKICAgICAv
LyBXZSBvcGVuIHRoZSBkYXRhYmFzZSBoZXJlIGV2ZW4gaWYgd2UndmUgYWxyZWFkeSBpbXBvcnRl
ZCBvdXIgaXRlbXMgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGFiYXNlIGlzIG9wZW4gaWYgd2UgbmVl
ZCB0byB3cml0ZSB0byBpdC4KLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAg
ICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRl
KG1fcXVldWUuY29weVJlZigpLCAqbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5h
Z2VyKCktPmxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpLCBtX3NlY3VyaXR5T3JpZ2luKTsK
LQotICAgIGlmIChtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5pbXBvcnRJdGVtcygqbV9zdG9yYWdlTWFw
KTsKLSAgICBtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlID0gdHJ1ZTsKKyAgICBpZiAoIW1f
bG9jYWxTdG9yYWdlRGF0YWJhc2UpIHsKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9
IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksICptX2xvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyKCksIG1fc2VjdXJpdHlPcmlnaW4sIG1fcXVvdGFJbkJ5dGVzKTsKKyAgICAgICAgbV9s
b2NhbFN0b3JhZ2VEYXRhYmFzZS0+b3BlbklmRXhpc3RpbmcoKTsKKyAgICB9CisgICAgcmV0dXJu
ICptX2xvY2FsU3RvcmFnZURhdGFiYXNlOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRj
aEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgY29uc3QKQEAgLTIxMSwxNCArMjA2LDYgQEAgdm9pZCBTdG9yYWdl
QXJlYTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25u
ZWN0aW9uLCBTdG8KICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OnN5bmNUb0RhdGFiYXNl
KCkKLXsKLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnVwZGF0ZURhdGFiYXNlKCk7Ci19Ci0KIHZv
aWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKIHsKICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlRGF0YWJh
c2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYS5oCmluZGV4IDIxZDQ4NTk5Y2VkZGYxNGM2NDY2ODNiODM0ZGM1MTBhMjJjNmEy
Y2UuLmZkNWYxMjIyYjFjMGI3ZTVlNGI2YTEwM2E4NGQ5NTgxZDNjZjQxYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5o
CkBAIC02MywyMyArNjMsMjEgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAg
dm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0
b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKIAotICAg
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcygpIGNvbnN0OworICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1zKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcigpOwogCiAg
ICAgYm9vbCBpc0VwaGVtZXJhbCgpIGNvbnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVz
cGFjZTsgfQogCi0gICAgdm9pZCBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHN5bmNUb0RhdGFiYXNlKCk7CiAgICAgdm9pZCBjbG9zZSgpOwog
CiBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1
ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwogCisgICAgTG9jYWxTdG9yYWdlRGF0
YWJhc2UmIGVuc3VyZURhdGFiYXNlKCkgY29uc3Q7CisKICAgICAvLyBXaWxsIGJlIG51bGwgaWYg
dGhlIHN0b3JhZ2UgYXJlYSBiZWxvbmdzIHRvIGEgc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZSBv
ciB0aGUgc3RvcmFnZSBhcmVhIGlzIGluIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgogICAgIFdlYWtQ
dHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsKICAgICBt
dXRhYmxlIFJlZlB0cjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9kaWRJbXBvcnRJdGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNl
IH07CiAKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgbV9zZWN1cml0eU9yaWdpbjsK
ICAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlcyB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQu
Y3BwCmluZGV4IDViZjY4N2Y0OWY5MzE4ZjVlNzgxZDMwZDIwZWY3MTcxYmNhMmUxMDQuLjY0OTk4
Mjg2ZTk5OWUwZTcyNGRjZTQzOTkzODc5OGYyNzg2ZDA2NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
U2V0LmNwcApAQCAtMTQ3LDEyICsxNDcsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0Ojp3YWl0
VW50aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmluaXNoZWQoKQogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwotICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCAmc2VtYXBob3JlXSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
c3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgQVNT
RVJUKHN0b3JhZ2VBcmVhKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlQXJlYSkKLSAgICAgICAg
ICAgICAgICBzdG9yYWdlQXJlYS0+c3luY1RvRGF0YWJhc2UoKTsKLSAgICAgICAgfQorICAgIG1f
cXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3JlXSB7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwo
KTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAppbmRleCAwMDU3ZGNjZThlNGY0N2YwZWM3
YWFjNzM1MjhiOTAyOGM5ODUwYWJkLi45NmY4ZmQwNmU3MWEwODkyMzM1Y2NkMTMwMjU0NmNiNjQx
YWRkODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFy
ZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJ
bXBsLmNwcApAQCAtMTc0LDggKzE3NCw4IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihG
cmFtZSogc291cmNlRnJhbWUpCiAgICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEo
KTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOworICAgIGlm
IChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkpCisgICAgICAgIG1f
c3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7CiAKICAgICBpZiAobV9zdG9yYWdl
QXJlYVN5bmMpCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CkBA
IC0yMTQsMTAgKzIxNCw4IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRl
bGV0aW9uKCkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiAgICAgCi0gICAgaWYgKG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpIHsKLSAg
ICAgICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAtPnF1b3RhKCk7Ci0gICAgICAgIG1f
c3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSk7Ci0gICAgfQorICAgIGlmIChh
dXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkpCisgICAgICAgIG1fc3Rv
cmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7CiAKICAgICBpZiAobV9zdG9yYWdlQXJl
YVN5bmMpIHsKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427151</attachid>
            <date>2021-04-27 07:55:48 -0700</date>
            <delta_ts>2021-04-27 10:39:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225065-20210427075547.patch</filename>
            <type>text/plain</type>
            <size>40777</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU4YTg3ZThhODAxMjc1
ZDYxOTNlYjllZTA2ZmZmZmM1YjM3YTg0Yy4uNjYwNzlkYWMyM2E1YjIyNDA1NDc1NDk1ODk0YTJl
ZTc0M2JiOTgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2VlcCBsb2NhbCBz
dG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oOgor
ICAgICAgICBFeHBvcnQgYSBjb3VwbGUgbW9yZSBzeW1ib2xzLgorCisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNsZWFyKToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuaDoKKyAgICAgICAgQWRkIGEgY2xlYXIoKSBm
dW5jdGlvbiB0byBTdG9yYWdlTWFwIHNvIHRoYXQgU3RvcmFnZUFyZWEgZG9lc24ndCByZWNvbnN0
cnVjdCBhCisgICAgICAgIG5ldyBTdG9yYWdlTWFwIG9iamVjdCB1bm5lY2Vzc2FyaWx5IHdoZW46
CisgICAgICAgIC0gVGhlIFN0b3JhZ2VNYXAgaXMgbm90IHNoYXJlZAorICAgICAgICAtIFRoZSBT
dG9yYWdlTWFwIGlzIGVtcHR5IChhbmQgY2xlYXIoKSBpcyBhIG5vLW9wKQorCiAyMDIxLTA0LTI2
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZjb3VudCBT
dHlsZTo6UmVzb2x2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjE0ZDlhNDg4Y2IwOGE4NjMzZmY1NTQwNGU3ZGQz
NzJiMTUzZjZkNi4uMjNlMDBmMjNmMjIzNTg5YjgzZGZhYTZjNTlmYmM3NmMwZDJiOWJiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAyMS0wNC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFnZSBkYXRhIGluIG1l
bW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTA2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gYSBXZWJQYWdlIHdvdWxkIHN0YXJ0IHRvIHVzZSB0aGUg
bG9jYWwgc3RvcmFnZSBBUEksIHRoZSBXZWJQcm9jZXNzCisgICAgICAgIHdvdWxkIHNlbmQgYSBz
eW5jIElQQyB0byB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmV0cmlldmUgYWxsIHRoZSBsb2NhbAor
ICAgICAgICBzdG9yYWdlIGVudHJpZXMgZm9yIHRoZSBvcmlnaW4uIFRoZSBOZXR3b3JrUHJvY2Vz
cyB3b3VsZCByZWFkIHRob3NlCisgICAgICAgIGVudHJpZXMgZnJvbSBhIFNRTGl0ZSBkYXRhYmFz
ZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgIEJvdGggdGhl
IE5ldHdvcmtQcm9jZXNzIHdvdWxkIGtlZXAgdGhlIGVudHJpZXMgaW4gbWVtb3J5LCBpbiBhCisg
ICAgICAgIFN0b3JhZ2VNYXAgb2JqZWN0ICh3aGljaCBpcyBiYXNpY2FsbHkgYSBIYXNoTWFwKS4g
T24gc29tZSBzaXRlcywgdGhlCisgICAgICAgIHN0cmluZ3MgaW4gdGhlIGxvY2FsIHN0b3JhZ2Ug
bWF5IGJlIHZlcnkgbGFyZ2UuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlCisgICAgICAgIFdlYlByb2Nl
c3MgdG8ga2VlcCB0aGVtIGluIG1lbW9yeSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZXNwZWNp
YWxseQorICAgICAgICBjb25zaWRlcmluZyB0aGF0IHRoZSBXZWIgQVBJIGlzIHN5bmNocm9ub3Vz
LiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWFsCisgICAgICAgIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IG1lbW9yeSBpbiB0aGUgTmV0d29yayBQcm9jZXNzIHNpZGUsIGVzcGVjaWFsbHkKKyAgICAgICAg
Z2l2ZW4gdGhhdCB0aGUgV2ViUHJvY2VzcyBhbHJlYWR5IGhhcyBpdHMgb3duIGNvcHkuIE9uIHRo
ZSBuZXR3b3JrCisgICAgICAgIHByb2Nlc3Mgc2lkZSwgd2UgY2FuIGdldCByaWQgb2YgdGhlIFN0
b3JhZ2VNYXAgZW50aXJlbHkgaW4gdGhlIGxvY2FsCisgICAgICAgIHN0b3JhZ2UgY2FzZSBhbmQg
MTAwJSByZWx5IG9uIHRoZSBTUUxpdGUgZGF0YWJhc2UuIFRoaXMgaXMgd2hhdCB0aGlzCisgICAg
ICAgIHBhdGNoIGltcGxlbWVudHMuCisKKyAgICAgICAgQS9CIHRlc3Rpbmcgc2hvd3MgdGhpcyBp
cyBhIDItMyUgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyLiBUaGVyZSBkb2VzCisgICAgICAgIG5v
dCBhcHBlYXIgdG8gYmUgYSBtZWFuaW5nZnVsIHByb2dyZXNzaW9uIG9uIFBMVU0gc2FkbHkuIFRo
aXMgaXMgYWxzbworICAgICAgICBuZXV0cmFsIG9uIFBMVC4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojplc3RpbWF0ZUVudHJ5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURh
dGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
TG9jYWxTdG9yYWdlRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
aXRlbSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3Qp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuaDoKKyAgICAgICAgLSBVcGRhdGUgTG9jYWxTdG9yYWdlRGF0YWJhc2UgQVBJIHRvIG1hdGNo
IG1vcmUgY2xvc2VseSB0aGUgQVBJIG9mCisgICAgICAgICAgU3RvcmFnZU1hcC4gVGhpcyB3YXkg
U3RvcmFnZUFyZWEgY2FuIHJlbHkgb24gdGhlIExvY2FsU3RvcmFnZURhdGFiYXNlCisgICAgICAg
ICAgZW50aXJlbHkgaW5zdGVhZCBvZiB0aGUgU3RvcmFnZU1hcCB3aXRoIG1pbmltYWwgY2hhbmdl
cy4KKyAgICAgICAgLSBBZGQgcXVvdGEgc3VwcG9ydCBzaW1pbGFybHkgdG8gd2hhdCBpcyBkb25l
IGluIFN0b3JhZ2VBcmVhIHNvIHRoYXQKKyAgICAgICAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
c2V0SXRlbSgpIGZhaWxzIHdoZW4gdGhlIHF1b3RhIGlzIHJlYWNoZWQuCisgICAgICAgIC0gQ2Fj
aGUgdGhlIFNRTGl0ZVN0YXRlbWVudHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKToK
KyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBzeW5jVG9EYXRhYmFzZSgpIGJlZm9y
ZSBjbG9zaW5nIHNpbmNlCisgICAgICAgIExvY2FsU3RvcmFnZURhdGFiYXNlIG5vIGxvbmdlciBo
YXMgYSBxdWV1ZSBvbiBwZW5kaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmFkZExp
c3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjppdGVtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjplbnN1cmVEYXRhYmFzZSBjb25zdCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oOgorICAgICAgICBJ
ZiB0aGUgU3RvcmFnZUFyZWEgaXMgdXNlZCBmb3IgbG9jYWwgc3RvcmFnZSwgd2Ugbm93IGRvbid0
IGV2ZW4gaW5pdGlhbGl6ZQorICAgICAgICBhIFN0b3JhZ2VNYXAgYW5kIHJlbHkgZW50aXJlbHkg
b24gTG9jYWxTdG9yYWdlRGF0YWJhc2UuIElmIHRoZSBTdG9yYWdlQXJlYQorICAgICAgICBpcyB1
c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UsIHdlIGtlZXAgdXNpbmcgYSBTdG9yYWdlTWFwIHNpbmNl
IHRoZXJlIGlzIG5vCisgICAgICAgIGJhY2tpbmcgZGF0YWJhc2UuIFRoaXMgaXMgZmFpcmx5IHN0
cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIEkgdXBkYXRlZCB0aGUKKyAgICAgICAgTG9jYWxTdG9yYWdl
RGF0YWJhc2UgQVBJIHRvIG1hdGNoIGZhaXJseSBjbG9zZWx5IHRoZSBTdG9yYWdlTWFwIG9uZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKToKKwogMjAyMS0wNC0yNiAgUGVyIEFybmUgVm9sbGFuICA8
cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gVXBkYXRlIHNhbmRib3ggbWVzc2Fn
ZSBmaWx0ZXIgc3ludGF4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCmluZGV4IDg1ODgzZDNiMmQ1ZjliMzgy
ODYzNmJmMzVmNjdiMWVlYmE1NDFjZmQuLmI5NWVmY2MwYmI2MDcyMGQ0YzNhOTdjZGUyNzcyNTQ2
OWZjZDgxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDQt
MjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEb24ndCBrZWVw
IGxvY2FsIHN0b3JhZ2UgZGF0YSBpbiBtZW1vcnkgaW4gdGhlIE5ldHdvcmtQcm9jZXNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwNjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFN0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsOjpjbGVh
cik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxl
dGlvbik6CisgICAgICAgIFVzZSB0aGUgbmV3IFN0b3JhZ2VNYXA6OmNsZWFyKCkgdG8gYXZvaWQg
Y29uc3RydWN0aW5nIGEgbmV3IFN0b3JhZ2VNYXAgdW5uZWNlc3NhcmlseQorICAgICAgICB3aGVu
OgorICAgICAgICAtIFRoZSBTdG9yYWdlTWFwIGlzIG5vdCBzaGFyZWQKKyAgICAgICAgLSBUaGUg
U3RvcmFnZU1hcCBpcyBlbXB0eQorCiAyMDIxLTA0LTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVA
YXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgV2ViSURCU2VydmVyIG5vdCBibG9jayBtYWluIHRo
cmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggMzcyYjgxYmNlODNlNDBmZTgxZmFkZjcwZjM5N2UxZDNk
YzMwYTFhZC4uMzg2YjZhNzM3NDBmNmVhNGVmNjRmZWMyMjNhMzQyNmNiMGU2NjU4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9kYjsgfQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKIAotICAgIHZvaWQgdXBkYXRlTGFzdENo
YW5nZXNDb3VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFzdENoYW5nZXND
b3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBT
dHJpbmcmKTsKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmluZyYp
OwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRl
cnJ1cHQoKTsKIAogICAgIGludDY0X3QgbGFzdEluc2VydFJvd0lEKCk7Ci0gICAgaW50IGxhc3RD
aGFuZ2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxhc3RDaGFuZ2VzKCk7CiAKICAgICB2
b2lkIHNldEJ1c3lUaW1lb3V0KGludCBtcyk7CiAgICAgdm9pZCBzZXRCdXN5SGFuZGxlcihpbnQo
Kikodm9pZCosIGludCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmgKaW5kZXggZGRiZTIyMTBkYzVlZjg1MjIyNmNhNjlkNDkxNmNiMmUxMWUyMDIz
Ny4uOWZmOWU4ZjFmMTY1NGY4MmRiM2Q2NmFjNTZjODA2MGVjZWQ2MWQxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC04OSw3ICs4OSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUz
KiBkYXRhYmFzZSk7CiAjZW5kaWYKICAgICAKLSAgICBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFi
YXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGF0YWJh
c2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
CmluZGV4IGQ0N2M3MmIwNmVmZmFlNGMyNzY5Yjc2Mjc2YjMxNDFmYmQ2ZmRiNzYuLmE4NDE0OWUw
ZjEzN2QxOTVlZjU5NGZhNmM5MmQwZTBhMWY4ZDM0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTWFwLmNwcApAQCAtMTc1LDYgKzE3NSwxOCBAQCBSZWZQdHI8U3RvcmFnZU1hcD4gU3Rv
cmFnZU1hcDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiBvbGRWYWx1ZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6
OmNsZWFyKCkKK3sKKyAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13cml0ZSBzZW1hbnRpY3MgaGVy
ZS4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVs
b25nIHRvIFN0b3JhZ2Ugb2JqZWN0cworICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFn
ZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCisgICAg
aWYgKHJlZkNvdW50KCkgPiAxICYmICFtX21hcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBT
dG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YVNpemUpOworCisgICAgbV9tYXAuY2xlYXIoKTsKKyAg
ICBtX2N1cnJlbnRMZW5ndGggPSAwOworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIFN0
b3JhZ2VNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewogICAgIHJldHVy
biBtX21hcC5jb250YWlucyhrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaAppbmRl
eCA0ZWE5ZTc4OTZjYWZhNzY5OTBlNTkwYzhiOTVkMzcxNDczMjBiMTljLi4yMmU5NzViOWNmZGY0
ZWVmNzY1ZjkxMjc0ZTEzZGZlMDk2ZTI4MTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VN
YXAuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxTdG9yYWdlTWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgb2xkVmFsdWUp
OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBjbGVhcigpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IDAyYzg2NzNkMzliMWI2ODI2NjJh
NzdlZDFjNjE2NmQ5NzFhNjJmNDQuLjdkZTVkYmQwYWIwOGY2MjE4NWU5YTEwNjJkZDAwZDRkN2U5
Y2I2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNywzNSArMjcsNDUgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZS5o
IgogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU3VkZGVuVGVybWluYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAot
c3RhdGljIGNvbnN0IGF1dG8gZGF0YWJhc2VVcGRhdGVJbnRlcnZhbCA9IDFfczsKLQotc3RhdGlj
IGNvbnN0IGludCBtYXhpbXVtSXRlbXNUb1VwZGF0ZSA9IDEwMDsKLQogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPExvY2FsU3RvcmFnZURhdGFiYXNl
PiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJl
ZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyBjb25zdCBjaGFyIGdldEl0ZW1zUXVl
cnlTdHJpbmdbXSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSI7CisKK3N0YXRp
YyBDaGVja2VkVWludDY0IGVzdGltYXRlRW50cnlTaXplKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExvY2FsU3RvcmFn
ZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRyYWNrZXIpLCBzZWN1cml0eU9yaWdp
bikpOworICAgIENoZWNrZWRVaW50NjQgZW50cnlTaXplOworICAgIGVudHJ5U2l6ZSArPSBrZXku
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgIGVudHJ5U2l6ZSArPSB2YWx1ZS5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhcik7CisgICAgcmV0dXJuIGVudHJ5U2l6ZTsKIH0KIAotTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OkxvY2FsU3RvcmFnZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUs
IFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK1JlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwg
V1RGTW92ZSh0cmFja2VyKSwgc2VjdXJpdHlPcmlnaW4sIHF1b3RhSW5CeXRlcykpOworfQorCitM
b2NhbFN0b3JhZ2VEYXRhYmFzZTo6TG9jYWxTdG9yYWdlRGF0YWJhc2UoUmVmPFdvcmtRdWV1ZT4m
JiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiB0cmFja2VyLCBjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0
ZXMpCiAgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogICAgICwgbV90cmFja2VyKFdURk1v
dmUodHJhY2tlcikpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKQogICAg
ICwgbV9kYXRhYmFzZVBhdGgobV90cmFja2VyLT5kYXRhYmFzZVBhdGgobV9zZWN1cml0eU9yaWdp
bikpCisgICAgLCBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC02NiwxMiArNzYsMTIgQEAgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiAgICAgQVNTRVJUKG1faXNDbG9zZWQpOwog
fQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVu
aW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
b3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNob3VsZENyZWF0ZURhdGFiYXNlKQog
ewogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgQVNTRVJUKCFtX2ZhaWxl
ZFRvT3BlbkRhdGFiYXNlKTsKIAotICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uob3BlbmluZ1N0
cmF0ZWd5KSkgeworICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uoc2hvdWxkQ3JlYXRlRGF0YWJh
c2UpKSB7CiAgICAgICAgIG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtODAsMTAgKzkwLDEwIEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6Om9wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kp
CiAgICAgICAgIG1fdHJhY2tlci0+ZGlkT3BlbkRhdGFiYXNlV2l0aE9yaWdpbihtX3NlY3VyaXR5
T3JpZ2luKTsKIH0KIAotYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJh
c2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQorYm9vbCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hv
dWxkQ3JlYXRlRGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBvcGVuaW5n
U3RyYXRlZ3kgPT0gU2tpcElmTm9uRXhpc3RlbnQpCisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRDcmVhdGVEYXRhYmFzZSA9PSBTaG91bGRD
cmVhdGVEYXRhYmFzZTo6Tm8pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fZGF0
YWJhc2VQYXRoLmlzRW1wdHkoKSkgewpAQCAtMTUzLDE5NiArMTYzLDE2NyBAQCBib29sIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdl
TWFwJiBzdG9yYWdlTWFwKQorSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zKCkgY29uc3QKIHsKLSAgICBpZiAobV9kaWRJbXBvcnRJdGVtcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IElmIGl0IGNhbid0IGltcG9ydCwgdGhlbiB0aGUg
ZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2lu
ZywKLSAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAotCi0gICAgLy8gV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBl
dmVuIGlmIHdlIGRvbid0IGVuZCB1cCBpbXBvcnRpbmcgYW55IGl0ZW1zIGR1ZSB0byBmYWlsdXJl
IGJlY2F1c2UKLSAgICAvLyB0aGVyZSdzIHJlYWxseSBubyBnb29kIHdheSB0byByZWNvdmVyIG90
aGVyIHRoYW4gbm90IGltcG9ydGluZyBhbnl0aGluZy4KLSAgICBtX2RpZEltcG9ydEl0ZW1zID0g
dHJ1ZTsKLQotICAgIG9wZW5EYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7CiAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZh
bHVlIEZST00gSXRlbVRhYmxlIl9zdHIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9IHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3Rh
dGVtZW50LCBnZXRJdGVtc1F1ZXJ5U3RyaW5nKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7Ci0KLSAgICBpbnQgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdo
aWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcga2V5ID0gcXVlcnku
Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcXVlcnkuZ2V0Q29sdW1u
QmxvYkFzU3RyaW5nKDEpOworICAgICAgICBTdHJpbmcga2V5ID0gcXVlcnktPmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJp
bmcoMSk7CiAgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1ZS5pc051bGwoKSkKICAg
ICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKLSAgICAg
ICAgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgp
OwogICAgIH0KIAotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRl
bXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIHN0b3JhZ2VNYXAuaW1wb3J0SXRlbXMoV1RGTW92ZShpdGVtcykpOworICAg
IHJldHVybiBpdGVtczsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUp
CiB7Ci0gICAgaXRlbURpZENoYW5nZShrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBpdGVtRGlk
Q2hhbmdlKGtleSwgU3RyaW5nKCkpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpj
bGVhcigpCi17Ci0gICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKLSAgICBtX3Nob3VsZENsZWFy
SXRlbXMgPSB0cnVlOwotCi0gICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotfQorICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIExvY2FsU3Rv
cmFnZURhdGFiYXNlOjpjbG9zZSgpCi17Ci0gICAgaWYgKG1faXNDbG9zZWQpCisgICAgb2xkVmFs
dWUgPSBpdGVtKGtleSk7CisgICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKLSAgICBpZiAobV9kaWRTY2hlZHVsZURhdGFi
YXNlVXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhtX2No
YW5nZWRJdGVtcyk7Ci0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7CisgICAgYXV0byBk
ZWxldGVTdGF0ZW1lbnQgPSBzY29wZWRTdGF0ZW1lbnQobV9kZWxldGVJdGVtU3RhdGVtZW50LCAi
REVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVN0
YXRlbWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBz
dGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5
KTsKIAotICAgIGJvb2wgaXNFbXB0eSA9IGRhdGFiYXNlSXNFbXB0eSgpOwotCi0gICAgaWYgKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLQotICAgIGlm
IChpc0VtcHR5KQotICAgICAgICBtX3RyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbiht
X3NlY3VyaXR5T3JpZ2luKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbURp
ZENoYW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBt
X2NoYW5nZWRJdGVtcy5zZXQoa2V5LCB2YWx1ZSk7Ci0gICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0
ZSgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY2hlZHVsZURhdGFiYXNlVXBk
YXRlKCkKLXsKLSAgICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKQorICAgIGludCBy
ZXN1bHQgPSBkZWxldGVTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtIGluIHRo
ZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKCFtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxlV3JpdGlu
Z1RvTG9jYWxTdG9yYWdlKQotICAgICAgICBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxl
V3JpdGluZ1RvTG9jYWxTdG9yYWdlID0gbWFrZVVuaXF1ZTxTdWRkZW5UZXJtaW5hdGlvbkRpc2Fi
bGVyPigpOwotCi0gICAgbV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlID0gdHJ1ZTsKLQotICAg
IG1fcXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+dXBkYXRlRGF0YWJhc2UoKTsKLSAgICB9KTsKKyAgICBpZiAo
bV9kYXRhYmFzZVNpemUpIHsKKyAgICAgICAgQ2hlY2tlZFVpbnQ2NCBlbnRyeVNpemUgPSBlc3Rp
bWF0ZUVudHJ5U2l6ZShrZXksIG9sZFZhbHVlKTsKKyAgICAgICAgaWYgKGVudHJ5U2l6ZS5oYXNP
dmVyZmxvd2VkKCkgfHwgZW50cnlTaXplLnVuc2FmZUdldCgpID49ICptX2RhdGFiYXNlU2l6ZSkK
KyAgICAgICAgICAgICptX2RhdGFiYXNlU2l6ZSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICptX2RhdGFiYXNlU2l6ZSAtPSBlbnRyeVNpemUudW5zYWZlR2V0KCk7CisgICAgfQogfQog
Ci12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZSgpCitTdHJpbmcgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7Ci0gICAg
aWYgKG1faXNDbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlkU2NoZWR1bGVEYXRh
YmFzZVVwZGF0ZSA9IGZhbHNlOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY2hhbmdl
ZEl0ZW1zOwotICAgIGlmIChtX2NoYW5nZWRJdGVtcy5zaXplKCkgPD0gbWF4aW11bUl0ZW1zVG9V
cGRhdGUpIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIGZldyBlbm91Z2ggY2hhbmdlZCBpdGVtcyB0
aGF0IHdlIGNhbiBqdXN0IGFsd2F5cyB3cml0ZSBhbGwgb2YgdGhlbS4KLSAgICAgICAgbV9jaGFu
Z2VkSXRlbXMuc3dhcChjaGFuZ2VkSXRlbXMpOwotICAgICAgICB1cGRhdGVEYXRhYmFzZVdpdGhD
aGFuZ2VkSXRlbXMoY2hhbmdlZEl0ZW1zKTsKLSAgICAgICAgbV9kaXNhYmxlU3VkZGVuVGVybWlu
YXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhpbXVtSXRlbXNUb1VwZGF0ZTsgKytpKSB7
Ci0gICAgICAgICAgICBhdXRvIGl0ID0gbV9jaGFuZ2VkSXRlbXMuYmVnaW4oKTsKLSAgICAgICAg
ICAgIGNoYW5nZWRJdGVtcy5hZGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKLQotICAgICAgICAgICAg
bV9jaGFuZ2VkSXRlbXMucmVtb3ZlKGl0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChj
aGFuZ2VkSXRlbXMuc2l6ZSgpIDw9IG1heGltdW1JdGVtc1RvVXBkYXRlKTsKKyAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgLy8gUmVz
Y2hlZHVsZSB0aGUgdXBkYXRlIGZvciB0aGUgcmVtYWluaW5nIGl0ZW1zLgotICAgICAgICBzY2hl
ZHVsZURhdGFiYXNlVXBkYXRlKCk7Ci0gICAgICAgIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJ
dGVtcyhjaGFuZ2VkSXRlbXMpOworICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1lbnQobV9n
ZXRJdGVtU3RhdGVtZW50LCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/
Il9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdl
dCBpdGVtIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQorICAgIHF1ZXJ5LT5iaW5kVGV4dCgxLCBrZXkpOworCisgICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQorICAg
ICAgICByZXR1cm4gcXVlcnktPmdldENvbHVtbkJsb2JBc1N0cmluZygwKTsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9ET05FKQorICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldCBpdGVtIGZy
b20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjaGFuZ2VkSXRlbXMpCit2b2lkIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBTdHJpbmcmIG9sZFZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG9wZW5EYXRhYmFzZShDcmVhdGVJZk5v
bkV4aXN0ZW50KTsKKyAgICAgICAgb3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlOjpZ
ZXMpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fc2hvdWxkQ2xlYXJJdGVtcykgewotICAgICAgICBtX3Nob3VsZENsZWFySXRlbXMg
PSBmYWxzZTsKLQotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXJTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOworICAgIGlmIChtX3F1b3RhSW5CeXRlcyAhPSBXZWJDb3JlOjpTdG9y
YWdlTWFwOjpub1F1b3RhKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZVNpemUpCisgICAgICAg
ICAgICBtX2RhdGFiYXNlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNp
emUobV9kYXRhYmFzZVBhdGgpOworICAgICAgICBpZiAoKm1fZGF0YWJhc2VTaXplID49IG1fcXVv
dGFJbkJ5dGVzKSB7CisgICAgICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXJTdGF0
ZW1lbnQuc3RlcCgpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2Fs
IHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CisgICAgICAgIENoZWNrZWRVaW50NjQg
bmV3RGF0YWJhc2VTaXplID0gKm1fZGF0YWJhc2VTaXplOworICAgICAgICBuZXdEYXRhYmFzZVNp
emUgKz0gZXN0aW1hdGVFbnRyeVNpemUoa2V5LCB2YWx1ZSk7CisgICAgICAgIGlmIChuZXdEYXRh
YmFzZVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IG5ld0RhdGFiYXNlU2l6ZS51bnNhZmVHZXQoKSA+
IG1fcXVvdGFJbkJ5dGVzKSB7CisgICAgICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRydWU7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kYXRhYmFzZVNpemUgPSBu
ZXdEYXRhYmFzZVNpemUudW5zYWZlR2V0KCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluc2VydFN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVF
UyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBvbGRWYWx1ZSA9IGl0ZW0oa2V5KTsKKworICAgIGF1dG8gaW5zZXJ0U3RhdGVt
ZW50ID0gc2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0U3RhdGVtZW50LCAiSU5TRVJUIElOVE8gSXRl
bVRhYmxlIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50KSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNh
bm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAgICBpZiAoZGVsZXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJuOworICAgIGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMSwga2V5KTsKKyAgICBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVl
KTsKKworICAgIGludCByZXN1bHQgPSBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRh
dGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKK30K
KworYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQoreworICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjbGVhclN0
YXRlbWVudCA9IHNjb3BlZFN0YXRlbWVudChtX2NsZWFyU3RhdGVtZW50LCAiREVMRVRFIEZST00g
SXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIWNsZWFyU3RhdGVtZW50KSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CisgICAgaW50IHJlc3VsdCA9IGNsZWFyU3RhdGVtZW50LT5zdGVw
KCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
LSAlaSIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2Rh
dGFiYXNlU2l6ZSA9IDA7CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGFuZ2VkSXRlbXMuYmVnaW4o
KSwgZW5kID0gY2hhbmdlZEl0ZW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Ly8gQSBudWxsIHZhbHVlIG1lYW5zIHRoYXQgdGhlIGtleS92YWx1ZSBwYWlyIHNob3VsZCBiZSBk
ZWxldGVkLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCA9IGl0LT52YWx1ZS5p
c051bGwoKSA/IGRlbGV0ZVN0YXRlbWVudCA6IGluc2VydFN0YXRlbWVudDsKKyAgICByZXR1cm4g
bV9kYXRhYmFzZS5sYXN0Q2hhbmdlcygpID4gMDsKK30KIAotICAgICAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgaXQtPmtleSk7Cit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbG9zZSgpCit7
CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzQ2xvc2VkID0g
dHJ1ZTsKIAotICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFsdWUgcGFpciwg
YmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICBib29s
IGlzRW1wdHkgPSBkYXRhYmFzZUlzRW1wdHkoKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQorICAgIG1fY2xlYXJTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1faW5zZXJ0U3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX2dldEl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1f
Z2V0SXRlbXNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZGVsZXRlSXRlbVN0YXRlbWVudCA9
IG51bGxwdHI7CiAKLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgfQorICAgIGlmICht
X2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiAKLSAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgbV90cmFja2Vy
LT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7CiB9CiAKLWJvb2wg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpCitib29sIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogewogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYyLDQgKzM0MywyNyBAQCBi
b29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKQogICAgIHJldHVybiAh
cXVlcnkuZ2V0Q29sdW1uSW50KDApOwogfQogCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpv
cGVuSWZFeGlzdGluZygpCit7CisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZTo6Tm8pOwor
CisgICAgLy8gUHJld2FybSB0aGUgZ2V0SXRlbXMgc3RhdGVtZW50IGZvciBwZXJmb3JtYW5jZSBz
aW5jZSB0aGUgcGFnZXMgYmxvY2sgc3luY2hyb25vdXNseSBvbiByZXRyaWV2aW5nIHRoZSBpdGVt
cy4KKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgc2NvcGVkU3RhdGVtZW50
KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOworfQorCitTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVt
ZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpIGNvbnN0Cit7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgc3Rh
dGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsK
KyAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgICAgICBpZiAoc3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCAyNGNlMTc0NjRlMTlj
Nzk5OWJkNjg0YjdhYjYyOTY3NjRkMmY1ZTlhLi45OWYxOTBhZTkxYzE1YTA1NDU2MDAwMGE5Njkz
ODMwNDM1MzRjZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwxNiArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5E
YXRhLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFN0
b3JhZ2VNYXA7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZTsKIGNsYXNzIFN1
ZGRlblRlcm1pbmF0aW9uRGlzYWJsZXI7CisKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDQsNTUgKzQyLDQ4IEBAIGNsYXNzIExvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlcjsKIAogY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmKTsKKyAgICBzdGF0aWMgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBjcmVhdGUo
UmVmPFdvcmtRdWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29u
c3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsK
ICAgICB+TG9jYWxTdG9yYWdlRGF0YWJhc2UoKTsKIAotICAgIC8vIFdpbGwgYmxvY2sgdW50aWwg
dGhlIGltcG9ydCBpcyBjb21wbGV0ZS4KLSAgICB2b2lkIGltcG9ydEl0ZW1zKFdlYkNvcmU6OlN0
b3JhZ2VNYXAmKTsKLQotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsK
LSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlKCk7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsKKyAgICB2b2lkIG9wZW5JZkV4aXN0
aW5nKCk7CisgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9s
ZFZhbHVlKTsKKyAgICBib29sIGNsZWFyKCk7CisgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0OworICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOwog
CiAgICAgLy8gV2lsbCBibG9jayB1bnRpbCBhbGwgcGVuZGluZyBjaGFuZ2VzIGhhdmUgYmVlbiB3
cml0dGVuIHRvIGRpc2suCiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIExvY2Fs
U3RvcmFnZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI+JiYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIExv
Y2FsU3RvcmFnZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXI+JiYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIHVuc2ln
bmVkIHF1b3RhSW5CeXRlcyk7CiAKLSAgICBlbnVtIERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IHsK
LSAgICAgICAgQ3JlYXRlSWZOb25FeGlzdGVudCwKLSAgICAgICAgU2tpcElmTm9uRXhpc3RlbnQK
LSAgICB9OwotICAgIGJvb2wgdHJ5VG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRl
Z3kpOwotICAgIHZvaWQgb3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5KTsKKyAg
ICBlbnVtIGNsYXNzIFNob3VsZENyZWF0ZURhdGFiYXNlIDogYm9vbCB7IE5vLCBZZXMgfTsKKyAg
ICBib29sIHRyeVRvT3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlKTsKKyAgICB2b2lk
IG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZSk7CiAKICAgICBib29sIG1pZ3JhdGVJ
dGVtVGFibGVJZk5lZWRlZCgpOworICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCkgY29uc3Q7CiAK
LSAgICB2b2lkIGl0ZW1EaWRDaGFuZ2UoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi0gICAgdm9pZCBzY2hlZHVsZURhdGFiYXNlVXBkYXRlKCk7Ci0gICAgdm9pZCB1
cGRhdGVEYXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mKTsKLQotICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCk7CisgICAgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7CiAK
ICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI+IG1fdHJhY2tlcjsKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgbV9z
ZWN1cml0eU9yaWdpbjsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKLSAgICBXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlcyB7IDAgfTsK
ICAgICBib29sIG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9k
aWRJbXBvcnRJdGVtcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsK
LQotICAgIGJvb2wgbV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fc2hvdWxkQ2xlYXJJdGVtcyB7IGZhbHNlIH07Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gbV9jaGFuZ2VkSXRlbXM7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fZGF0YWJhc2VT
aXplOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN1ZGRlblRlcm1pbmF0aW9uRGlz
YWJsZXI+IG1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9Mb2NhbFN0b3Jh
Z2U7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX2NsZWFyU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEl0ZW1TdGF0ZW1lbnQ7Cisg
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dl
dEl0ZW1zU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV9kZWxldGVJdGVtU3RhdGVtZW50OwogfTsKIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwCmluZGV4IDJkNDMxZDViOWJmZDY1YTc3MzAzMTgzMDgzZjYz
MTM4ZWZjMzU3NDkuLjYwMTUzYmY3ZDZiMDdmNThlMGVhMTU5NWExNGZjOGM4MTM1M2MxNDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC03MywxMCArNzMsOCBAQCB2b2lk
IExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogdm9pZCBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U6OmZsdXNoQW5kQ2xvc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKGF1
dG8qIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkgewotICAgICAg
ICBzdG9yYWdlQXJlYS0+c3luY1RvRGF0YWJhc2UoKTsKKyAgICBpZiAoYXV0byogc3RvcmFnZUFy
ZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQogICAgICAgICBzdG9yYWdlQXJlYS0+
Y2xvc2UoKTsKLSAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAKaW5kZXggNmE3NmQ3NzA5NmNiMmEz
NGFlOThkN2Y3MDMxYzAyOWY4YzgyODhkMS4uYzM0MTdhNDI5ZWJjM2RiYTdkMzBiMzc5NWQwMDE0
M2JhODE1ZTk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
U3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00MCwxMSArNDEsMTIgQEAgU3RvcmFnZUFyZWE6OlN0
b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBj
b25zdCBTZWMKICAgICA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKG1ha2VXZWFrUHRyKGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSkpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2lu
KQogICAgICwgbV9xdW90YUluQnl0ZXMocXVvdGFJbkJ5dGVzKQotICAgICwgbV9zdG9yYWdlTWFw
KFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcykpCiAgICAgLCBtX2lkZW50aWZpZXIo
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKICAgICAsIG1fcXVldWUoV1RGTW92ZShxdWV1ZSkpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkp
CisgICAgICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRl
cyk7CiB9CiAKIFN0b3JhZ2VBcmVhOjp+U3RvcmFnZUFyZWEoKQpAQCAtNjEsNyArNjMsNyBAQCB2
b2lkIFN0b3JhZ2VBcmVhOjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNv
bm5lY3Rpb25JRCkKICAgICBBU1NFUlQoIW1fZXZlbnRMaXN0ZW5lcnMuY29udGFpbnMoY29ubmVj
dGlvbklEKSk7CiAKICAgICBpZiAobV9ldmVudExpc3RlbmVycy5pc0VtcHR5KCkgJiYgIWlzRXBo
ZW1lcmFsKCkpCi0gICAgICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsK
KyAgICAgICAgZW5zdXJlRGF0YWJhc2UoKTsKIAogICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGNv
bm5lY3Rpb25JRCk7CiB9CkBAIC03NCwxMSArNzYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1v
dmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCkKICAgICBp
ZiAoIW1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzeW5j
VG9EYXRhYmFzZSgpOwotICAgIG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5yZW1vdmVTdG9yYWdl
QXJlYShtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2Up
CisgICAgICAgIG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5yZW1vdmVTdG9yYWdlQXJlYShtX3Nl
Y3VyaXR5T3JpZ2luKTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYTo6aGFzTGlzdGVuZXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQpIGNvbnN0CkBAIC0xMDEsNzQgKzEwMCw3
NSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjbG9uZSgpIGNv
bnN0CiB2b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nLCBib29sJiBxdW90YUV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7
CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0KLSAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0
b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsK
LSAgICBpZiAobmV3U3RvcmFnZU1hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShu
ZXdTdG9yYWdlTWFwKTsKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBhdXRvIG5l
d1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUs
IHF1b3RhRXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKG5ld1N0b3JhZ2VNYXApCisgICAgICAgICAg
ICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAgIH0gZWxzZQorICAg
ICAgICBlbnN1cmVEYXRhYmFzZSgpLnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3Rh
RXhjZXB0aW9uKTsKIAogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2UtPnNldEl0ZW0oa2V5LCB2YWx1ZSk7Ci0KICAgICBkaXNwYXRjaEV2ZW50cyhzb3Vy
Y2VDb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHVy
bFN0cmluZyk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
IHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgb3BlbkRhdGFi
YXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwogCiAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAg
IGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZh
bHVlKTsKLSAgICBpZiAobmV3U3RvcmFnZU1hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RG
TW92ZShuZXdTdG9yYWdlTWFwKTsKLQorICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7CisgICAgICAg
IGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZh
bHVlKTsKKyAgICAgICAgaWYgKG5ld1N0b3JhZ2VNYXApCisgICAgICAgICAgICBtX3N0b3JhZ2VN
YXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAgIH0gZWxzZQorICAgICAgICBlbnN1cmVE
YXRhYmFzZSgpLnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CiAgICAgaWYgKG9sZFZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+cmVtb3ZlSXRlbShrZXkpOwotCiAg
ICAgZGlzcGF0Y2hFdmVudHMoc291cmNlQ29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtl
eSwgb2xkVmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVh
OjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5EYXRh
YmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9zdG9yYWdlTWFwLT5s
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1h
cDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKIAotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFi
YXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbGVhcigpOworICAgIGlmIChp
c0VwaGVtZXJhbCgpKSB7CisgICAgICAgIGlmICghbV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3Rv
cmFnZU1hcC0+Y2xlYXIoKSkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3
U3RvcmFnZU1hcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFlbnN1cmVEYXRhYmFzZSgp
LmNsZWFyKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgZGlzcGF0Y2hFdmVu
dHMoc291cmNlQ29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZygpLCBTdHJpbmco
KSwgU3RyaW5nKCksIHVybFN0cmluZyk7CiB9CiAKLWNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiBTdG9yYWdlQXJlYTo6aXRlbXMoKSBjb25zdAorSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
U3RvcmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7CisgICAgaWYg
KGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPml0ZW1zKCk7CiAK
LSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5pdGVtcygpOworICAgIHJldHVybiBlbnN1cmVEYXRh
YmFzZSgpLml0ZW1zKCk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKCkKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFw
OjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwotCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2UpIHsKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xvc2UoKTsKLSAgICAgICAg
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IG51bGxwdHI7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+Y2xlYXIo
KSkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpIHsKKyAgICAg
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7CisgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlID0gbnVsbHB0cjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZv
ciAoYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKSwgZW5kID0gbV9ldmVudExpc3Rl
bmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0xNzksMjIgKzE3OSwxNyBAQCB2b2lk
IFN0b3JhZ2VBcmVhOjpjbGVhcigpCiAgICAgfQogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjpvcGVu
RGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCkgY29uc3QKK0xvY2FsU3RvcmFnZURhdGFi
YXNlJiBTdG9yYWdlQXJlYTo6ZW5zdXJlRGF0YWJhc2UoKSBjb25zdAogewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCi0g
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIWlzRXBoZW1lcmFsKCkpOwogCiAgICAgQVNTRVJU
KG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5sb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIoKSk7CiAgICAgLy8gV2Ugb3BlbiB0aGUgZGF0YWJhc2UgaGVyZSBldmVu
IGlmIHdlJ3ZlIGFscmVhZHkgaW1wb3J0ZWQgb3VyIGl0ZW1zIHRvIGVuc3VyZSB0aGF0IHRoZSBk
YXRhYmFzZSBpcyBvcGVuIGlmIHdlIG5lZWQgdG8gd3JpdGUgdG8gaXQuCi0gICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX3F1ZXVlLmNvcHlSZWYoKSwgKm1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIoKSwgbV9zZWN1cml0eU9yaWdpbik7Ci0KLSAgICBpZiAobV9kaWRJbXBvcnRJdGVtc0Zyb21E
YXRhYmFzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+
aW1wb3J0SXRlbXMoKm1fc3RvcmFnZU1hcCk7Ci0gICAgbV9kaWRJbXBvcnRJdGVtc0Zyb21EYXRh
YmFzZSA9IHRydWU7CisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CisgICAgICAg
IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKG1f
cXVldWUuY29weVJlZigpLCAqbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2Vy
KCktPmxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpLCBtX3NlY3VyaXR5T3JpZ2luLCBtX3F1
b3RhSW5CeXRlcyk7CisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPm9wZW5JZkV4aXN0
aW5nKCk7CisgICAgfQorICAgIHJldHVybiAqbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKIH0KIAog
dm9pZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVh
SW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3Qg
U3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0CkBAIC0yMTEs
MTQgKzIwNiw2IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvCiAgICAgfQogfQogCi12b2lkIFN0
b3JhZ2VBcmVhOjpzeW5jVG9EYXRhYmFzZSgpCi17Ci0gICAgaWYgKCFtX2xvY2FsU3RvcmFnZURh
dGFiYXNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT51
cGRhdGVEYXRhYmFzZSgpOwotfQotCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbG9zZSgpCiB7CiAgICAg
aWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCAyMWQ0ODU5OWNlZGRm
MTRjNjQ2NjgzYjgzNGRjNTEwYTIyYzZhMmNlLi5mZDVmMTIyMmIxYzBiN2U1ZTRiNmExMDNhODRk
OTU4MWQzY2Y0MWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuaApAQCAtNjMsMjMgKzYzLDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0
aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyk7CiAKLSAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
aXRlbXMoKSBjb25zdDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtcygpIGNvbnN0
OwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgaXNFcGhlbWVyYWwoKSBjb25zdCB7IHJl
dHVybiAhbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7IH0KIAotICAgIHZvaWQgb3BlbkRhdGFiYXNl
QW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzeW5jVG9EYXRhYmFz
ZSgpOwogICAgIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRXZl
bnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFy
ZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25z
dDsKIAorICAgIExvY2FsU3RvcmFnZURhdGFiYXNlJiBlbnN1cmVEYXRhYmFzZSgpIGNvbnN0Owor
CiAgICAgLy8gV2lsbCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFyZWEgYmVsb25ncyB0byBhIHNl
c3Npb24gc3RvcmFnZSBuYW1lc3BhY2Ugb3IgdGhlIHN0b3JhZ2UgYXJlYSBpcyBpbiBhbiBlcGhl
bWVyYWwgc2Vzc2lvbi4KICAgICBXZWFrUHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gbV9sb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U7CiAgICAgbXV0YWJsZSBSZWZQdHI8TG9jYWxTdG9yYWdlRGF0YWJh
c2U+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZGlkSW1wb3J0
SXRlbXNGcm9tRGF0YWJhc2UgeyBmYWxzZSB9OwogCiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhIG1fc2VjdXJpdHlPcmlnaW47CiAgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAw
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXJTZXQuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcAppbmRleCA1YmY2ODdmNDlmOTMxOGY1ZTc4MWQz
MGQyMGVmNzE3MWJjYTJlMTA0Li42NDk5ODI4NmU5OTllMGU3MjRkY2U0Mzk5Mzg3OThmMjc4NmQw
NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXJTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKQEAgLTE0NywxMiArMTQ3LDcgQEAgdm9p
ZCBTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2luZ0xvY2FsU3RvcmFnZUZpbmlzaGVk
KCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgQmluYXJ5U2VtYXBob3Jl
IHNlbWFwaG9yZTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgJnNlbWFwaG9yZV0gewot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYXMudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlQXJlYSk7Ci0gICAgICAgICAgICBp
ZiAoc3RvcmFnZUFyZWEpCi0gICAgICAgICAgICAgICAgc3RvcmFnZUFyZWEtPnN5bmNUb0RhdGFi
YXNlKCk7Ci0gICAgICAgIH0KKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZV0gewog
ICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7CiAgICAgc2VtYXBob3JlLndhaXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAK
aW5kZXggMDA1N2RjY2U4ZTRmNDdmMGVjN2FhYzczNTI4YjkwMjhjOTg1MGFiZC4uOTZmOGZkMDZl
NzFhMDg5MjMzNWNjZDEzMDI1NDZjYjY0MWFkZDg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lk
IFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKQogICAgIGlmICghbV9z
dG9yYWdlTWFwLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgcXVv
dGEgPSBtX3N0b3JhZ2VNYXAtPnF1b3RhKCk7Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1h
cDo6Y3JlYXRlKHF1b3RhKTsKKyAgICBpZiAoYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdl
TWFwLT5jbGVhcigpKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VN
YXApOwogCiAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQogICAgICAgICBtX3N0b3JhZ2VBcmVh
U3luYy0+c2NoZWR1bGVDbGVhcigpOwpAQCAtMjE0LDEwICsyMTQsOCBAQCB2b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAgIAotICAgIGlmIChtX3N0
b3JhZ2VNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHF1b3RhID0gbV9zdG9yYWdl
TWFwLT5xdW90YSgpOwotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUo
cXVvdGEpOwotICAgIH0KKyAgICBpZiAoYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFw
LT5jbGVhcigpKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXAp
OwogCiAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKSB7CiAgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5zY2hlZHVsZUNsZWFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427164</attachid>
            <date>2021-04-27 10:39:46 -0700</date>
            <delta_ts>2021-04-27 11:33:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225065-20210427103945.patch</filename>
            <type>text/plain</type>
            <size>41456</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmOGI0ZjE0MzEwZDVl
Y2RjYjIyNDdjOGIwYmMyYWNiZmZmNmExZC4uMTIxYzBkYjIzMjM0NzI4ZGQyOThhNGUwM2QwMjA4
OWJiNjZkMzU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2VlcCBsb2NhbCBz
dG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oOgor
ICAgICAgICBFeHBvcnQgYSBjb3VwbGUgbW9yZSBzeW1ib2xzLgorCisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNsZWFyKToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuaDoKKyAgICAgICAgQWRkIGEgY2xlYXIoKSBm
dW5jdGlvbiB0byBTdG9yYWdlTWFwIHNvIHRoYXQgU3RvcmFnZUFyZWEgZG9lc24ndCByZWNvbnN0
cnVjdCBhCisgICAgICAgIG5ldyBTdG9yYWdlTWFwIG9iamVjdCB1bm5lY2Vzc2FyaWx5IHdoZW46
CisgICAgICAgIC0gVGhlIFN0b3JhZ2VNYXAgaXMgbm90IHNoYXJlZAorICAgICAgICAtIFRoZSBT
dG9yYWdlTWFwIGlzIGVtcHR5IChhbmQgY2xlYXIoKSBpcyBhIG5vLW9wKQorCiAyMDIxLTA0LTI3
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFtH
UFVdIFRoZSBVSSBwcm9jZXNzIHNob3VsZCBpc3N1ZSB0aGUgbWFjaCBzYW5kYm94IGV4dGVuc2lv
biB0byAnY29tLmFwcGxlLkFHWENvbXBpbGVyU2VydmljZScgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE5YWEwNWY3
MDc1ZDE5MTU2OTA1NjI2NTIzY2JlYjBmMjQyOTU4NDcuLmNhYWY2M2M1NDk0ZTAzMjcwNmM5MWI5
NGVjZmQ1ZmFlNzZlYzEzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMjEtMDQtMjYg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEb24ndCBrZWVwIGxv
Y2FsIHN0b3JhZ2UgZGF0YSBpbiBtZW1vcnkgaW4gdGhlIE5ldHdvcmtQcm9jZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwNjUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGEgV2ViUGFnZSB3
b3VsZCBzdGFydCB0byB1c2UgdGhlIGxvY2FsIHN0b3JhZ2UgQVBJLCB0aGUgV2ViUHJvY2Vzcwor
ICAgICAgICB3b3VsZCBzZW5kIGEgc3luYyBJUEMgdG8gdGhlIE5ldHdvcmtQcm9jZXNzIHRvIHJl
dHJpZXZlIGFsbCB0aGUgbG9jYWwKKyAgICAgICAgc3RvcmFnZSBlbnRyaWVzIGZvciB0aGUgb3Jp
Z2luLiBUaGUgTmV0d29ya1Byb2Nlc3Mgd291bGQgcmVhZCB0aG9zZQorICAgICAgICBlbnRyaWVz
IGZyb20gYSBTUUxpdGUgZGF0YWJhc2UgYW5kIHNlbmQgdGhlbSBiYWNrIHRvIHRoZSBXZWJQcm9j
ZXNzLgorICAgICAgICBCb3RoIHRoZSBOZXR3b3JrUHJvY2VzcyB3b3VsZCBrZWVwIHRoZSBlbnRy
aWVzIGluIG1lbW9yeSwgaW4gYQorICAgICAgICBTdG9yYWdlTWFwIG9iamVjdCAod2hpY2ggaXMg
YmFzaWNhbGx5IGEgSGFzaE1hcCkuIE9uIHNvbWUgc2l0ZXMsIHRoZQorICAgICAgICBzdHJpbmdz
IGluIHRoZSBsb2NhbCBzdG9yYWdlIG1heSBiZSB2ZXJ5IGxhcmdlLiBJdCBpcyB1c2VmdWwgZm9y
IHRoZQorICAgICAgICBXZWJQcm9jZXNzIHRvIGtlZXAgdGhlbSBpbiBtZW1vcnkgZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbnMsIGVzcGVjaWFsbHkKKyAgICAgICAgY29uc2lkZXJpbmcgdGhhdCB0aGUg
V2ViIEFQSSBpcyBzeW5jaHJvbm91cy4gSG93ZXZlciwgdGhlcmUgaXMgbm8gcmVhbAorICAgICAg
ICBuZWVkIHRvIGtlZXAgdGhlbSBpbiBtZW1vcnkgaW4gdGhlIE5ldHdvcmsgUHJvY2VzcyBzaWRl
LCBlc3BlY2lhbGx5CisgICAgICAgIGdpdmVuIHRoYXQgdGhlIFdlYlByb2Nlc3MgYWxyZWFkeSBo
YXMgaXRzIG93biBjb3B5LiBPbiB0aGUgbmV0d29yaworICAgICAgICBwcm9jZXNzIHNpZGUsIHdl
IGNhbiBnZXQgcmlkIG9mIHRoZSBTdG9yYWdlTWFwIGVudGlyZWx5IGluIHRoZSBsb2NhbAorICAg
ICAgICBzdG9yYWdlIGNhc2UgYW5kIDEwMCUgcmVseSBvbiB0aGUgU1FMaXRlIGRhdGFiYXNlLiBU
aGlzIGlzIHdoYXQgdGhpcworICAgICAgICBwYXRjaCBpbXBsZW1lbnRzLgorCisgICAgICAgIEEv
QiB0ZXN0aW5nIHNob3dzIHRoaXMgaXMgYSAyLTMlIHByb2dyZXNzaW9uIG9uIE1lbWJ1c3Rlci4g
VGhlcmUgZG9lcworICAgICAgICBub3QgYXBwZWFyIHRvIGJlIGEgbWVhbmluZ2Z1bCBwcm9ncmVz
c2lvbiBvbiBQTFVNIHNhZGx5LiBUaGlzIGlzIGFsc28KKyAgICAgICAgbmV1dHJhbCBvbiBQTFQu
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZXN0aW1hdGVFbnRyeVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OkxvY2FsU3RvcmFnZURhdGFiYXNlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZURhdGFiYXNlOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNl
OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFz
ZUlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
b3BlbklmRXhpc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
c2NvcGVkU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmg6CisgICAgICAgIC0gVXBkYXRlIExvY2FsU3RvcmFn
ZURhdGFiYXNlIEFQSSB0byBtYXRjaCBtb3JlIGNsb3NlbHkgdGhlIEFQSSBvZgorICAgICAgICAg
IFN0b3JhZ2VNYXAuIFRoaXMgd2F5IFN0b3JhZ2VBcmVhIGNhbiByZWx5IG9uIHRoZSBMb2NhbFN0
b3JhZ2VEYXRhYmFzZQorICAgICAgICAgIGVudGlyZWx5IGluc3RlYWQgb2YgdGhlIFN0b3JhZ2VN
YXAgd2l0aCBtaW5pbWFsIGNoYW5nZXMuCisgICAgICAgIC0gQWRkIHF1b3RhIHN1cHBvcnQgc2lt
aWxhcmx5IHRvIHdoYXQgaXMgZG9uZSBpbiBTdG9yYWdlQXJlYSBzbyB0aGF0CisgICAgICAgICAg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNldEl0ZW0oKSBmYWlscyB3aGVuIHRoZSBxdW90YSBpcyBy
ZWFjaGVkLgorICAgICAgICAtIENhY2hlIHRoZSBTUUxpdGVTdGF0ZW1lbnRzIGZvciBwZXJmb3Jt
YW5jZSByZWFzb25zCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6Zmx1c2hBbmRDbG9zZSk6CisgICAgICAgIFdlIG5vIGxvbmdlciBuZWVkIHRvIGNhbGwg
c3luY1RvRGF0YWJhc2UoKSBiZWZvcmUgY2xvc2luZyBzaW5jZQorICAgICAgICBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZSBubyBsb25nZXIgaGFzIGEgcXVldWUgb24gcGVuZGluZyBvcGVyYXRpb25zLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpzZXRJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYTo6aXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6ZW5zdXJl
RGF0YWJhc2UgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZUFyZWEuaDoKKyAgICAgICAgSWYgdGhlIFN0b3JhZ2VBcmVhIGlzIHVzZWQgZm9yIGxvY2Fs
IHN0b3JhZ2UsIHdlIG5vdyBkb24ndCBldmVuIGluaXRpYWxpemUKKyAgICAgICAgYSBTdG9yYWdl
TWFwIGFuZCByZWx5IGVudGlyZWx5IG9uIExvY2FsU3RvcmFnZURhdGFiYXNlLiBJZiB0aGUgU3Rv
cmFnZUFyZWEKKyAgICAgICAgaXMgdXNlZCBmb3Igc2Vzc2lvbiBzdG9yYWdlLCB3ZSBrZWVwIHVz
aW5nIGEgU3RvcmFnZU1hcCBzaW5jZSB0aGVyZSBpcyBubworICAgICAgICBiYWNraW5nIGRhdGFi
YXNlLiBUaGlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQgYmVjYXVzZSBJIHVwZGF0ZWQgdGhl
CisgICAgICAgIExvY2FsU3RvcmFnZURhdGFiYXNlIEFQSSB0byBtYXRjaCBmYWlybHkgY2xvc2Vs
eSB0aGUgU3RvcmFnZU1hcCBvbmUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXJTZXQ6OndhaXRVbnRpbFN5bmNpbmdMb2NhbFN0b3JhZ2VGaW5pc2hlZCk6CisKIDIwMjEtMDQt
MjcgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01h
a2VdIERvbid0IHVzZSBGT1JXQVJESU5HX0hFQURFUlNfRElSIGZvciBHVEsgV2ViS2l0IGhlYWRl
cnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggYzgyMWYxNjE0NzY4NzQ2MzYyMWQwMTZlMmQzNWRh
NjlmZWQ0ZTg5Yy4uNDNiZjk3NTgwNTA5OGJiNjk3YmM5YzI3MGEzNjNhNjliY2YyN2Q5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNC0yNiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFn
ZSBkYXRhIGluIG1lbW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTA2NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKToKKyAgICAg
ICAgVXNlIHRoZSBuZXcgU3RvcmFnZU1hcDo6Y2xlYXIoKSB0byBhdm9pZCBjb25zdHJ1Y3Rpbmcg
YSBuZXcgU3RvcmFnZU1hcCB1bm5lY2Vzc2FyaWx5CisgICAgICAgIHdoZW46CisgICAgICAgIC0g
VGhlIFN0b3JhZ2VNYXAgaXMgbm90IHNoYXJlZAorICAgICAgICAtIFRoZSBTdG9yYWdlTWFwIGlz
IGVtcHR5CisKIDIwMjEtMDQtMjYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgTWFjLXNwZWNpZmljIENNYWtlIGZpbGVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IDM3MmI4MWJj
ZTgzZTQwZmU4MWZhZGY3MGYzOTdlMWQzZGMzMGExYWQuLjM4NmI2YTczNzQwZjZlYTRlZjY0ZmVj
MjIzYTM0MjZjYjBlNjY1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3Blbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGI7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlKCk7
CiAKLSAgICB2b2lkIHVwZGF0ZUxhc3RDaGFuZ2VzQ291bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHVwZGF0ZUxhc3RDaGFuZ2VzQ291bnQoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCByZXR1cm5zQXRMZWFz
dE9uZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgaW50ZXJydXB0KCk7CiAKICAgICBpbnQ2NF90IGxhc3RJbnNl
cnRSb3dJRCgpOwotICAgIGludCBsYXN0Q2hhbmdlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBsYXN0Q2hhbmdlcygpOwogCiAgICAgdm9pZCBzZXRCdXN5VGltZW91dChpbnQgbXMpOwogICAg
IHZvaWQgc2V0QnVzeUhhbmRsZXIoaW50KCopKHZvaWQqLCBpbnQpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IGRkYmUyMjEwZGM1ZWY4
NTIyMjZjYTY5ZDQ5MTZjYjJlMTFlMjAyMzcuLjlmZjllOGYxZjE2NTRmODJkYjNkNjZhYzU2Yzgw
NjBlY2VkNjFkMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uaApAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdHJ1
bmNhdGVEYXRhYmFzZUZpbGUoc3FsaXRlMyogZGF0YWJhc2UpOwogI2VuZGlmCiAgICAgCi0gICAg
c3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBsb25nIGxvbmcgZ2V0RGF0YWJhc2VGaWxl
U2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
T3B0aW9uYWw8V2FsbFRpbWU+IGRhdGFiYXNlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGF0
YWJhc2VNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCBkNDdjNzJiMDZlZmZhZTRjMjc2OWI3NjI3
NmIzMTQxZmJkNmZkYjc2Li5hODQxNDllMGYxMzdkMTk1ZWY1OTRmYTZjOTJkMGUwYTFmOGQzNDcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAgLTE3NSw2ICsxNzUsMTgg
QEAgUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5n
JiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0
cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpjbGVhcigpCit7CisgICAgLy8gSW1wbGVtZW50IGNv
cHktb24td3JpdGUgc2VtYW50aWNzIGhlcmUuIFdlJ3JlIGd1YXJhbnRlZWQgdGhhdCB0aGUgb25s
eSByZWZzIG9mIFN0b3JhZ2VNYXBzIGJlbG9uZyB0byBTdG9yYWdlIG9iamVjdHMKKyAgICAvLyBz
byBpZiBtb3JlIHRoYW4gb25lIFN0b3JhZ2Ugb2JqZWN0IHJlZnMgdGhpcyBtYXAsIGNvcHkgaXQg
YmVmb3JlIG11dGF0aW5nIGl0LgorICAgIGlmIChyZWZDb3VudCgpID4gMSAmJiAhbV9tYXAuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFTaXplKTsK
KworICAgIG1fbWFwLmNsZWFyKCk7CisgICAgbV9jdXJyZW50TGVuZ3RoID0gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwogYm9vbCBTdG9yYWdlTWFwOjpjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTWFwLmgKaW5kZXggNGVhOWU3ODk2Y2FmYTc2OTkwZTU5MGM4Yjk1ZDM3
MTQ3MzIwYjE5Yy4uMjJlOTc1YjljZmRmNGVlZjc2NWY5MTI3NGUxM2RmZTA5NmUyODE5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBzZXRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBTdHJpbmcmIG9sZFZhbHVlLCBib29sJiBxdW90
YUV4Y2VwdGlvbik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFN0b3JhZ2VNYXA+IHNldEl0
ZW1JZ25vcmluZ1F1b3RhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gcmVtb3ZlSXRlbShjb25zdCBT
dHJpbmcmLCBTdHJpbmcmIG9sZFZhbHVlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U3Rv
cmFnZU1hcD4gY2xlYXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29u
c3QgU3RyaW5nJiBrZXkpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApp
bmRleCAwMmM4NjczZDM5YjFiNjgyNjYyYTc3ZWQxYzYxNjZkOTcxYTYyZjQ0Li4xNzlmOTI5Nzgw
ZDU2MjU2ZjIzZDRlNGEzOTA4MWFlMTc1YWQyNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDEwLCAyMDEzLCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzUgKzI3LDQ1IEBACiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCIKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJh
bnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0b3Jh
Z2VNYXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1ZGRlblRlcm1pbmF0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXN0YXRpYyBjb25zdCBhdXRvIGRhdGFiYXNlVXBkYXRl
SW50ZXJ2YWwgPSAxX3M7Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUl0ZW1zVG9VcGRhdGUg
PSAxMDA7Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LVJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShS
ZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYm
IHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCitzdGF0
aWMgY29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFsdWUg
RlJPTSBJdGVtVGFibGUiOworCitzdGF0aWMgQ2hlY2tlZFVpbnQ2NCBlc3RpbWF0ZUVudHJ5U2l6
ZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBDaGVja2Vk
VWludDY0IGVudHJ5U2l6ZTsKKyAgICBlbnRyeVNpemUgKz0ga2V5Lmxlbmd0aCgpICogc2l6ZW9m
KFVDaGFyKTsKKyAgICBlbnRyeVNpemUgKz0gdmFsdWUubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OworICAgIHJldHVybiBlbnRyeVNpemU7Cit9CisKK1JlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwg
V1RGTW92ZSh0cmFja2VyKSwgc2VjdXJpdHlPcmlnaW4pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwgV1RGTW92ZSh0cmFja2Vy
KSwgc2VjdXJpdHlPcmlnaW4sIHF1b3RhSW5CeXRlcykpOwogfQogCi1Mb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6TG9jYWxTdG9yYWdlRGF0YWJhc2UoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwgUmVmPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiB0cmFja2VyLCBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIHNlY3VyaXR5T3JpZ2luKQorTG9jYWxTdG9yYWdlRGF0YWJhc2U6OkxvY2FsU3RvcmFn
ZURhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9y
aWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogICAgIDogbV9xdWV1ZShXVEZNb3ZlKHF1ZXVl
KSkKICAgICAsIG1fdHJhY2tlcihXVEZNb3ZlKHRyYWNrZXIpKQogICAgICwgbV9zZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbikKICAgICAsIG1fZGF0YWJhc2VQYXRoKG1fdHJhY2tlci0+ZGF0
YWJhc2VQYXRoKG1fc2VjdXJpdHlPcmlnaW4pKQorICAgICwgbV9xdW90YUluQnl0ZXMocXVvdGFJ
bkJ5dGVzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogfQpAQCAtNjYsMTIg
Kzc2LDEzIEBAIExvY2FsU3RvcmFnZURhdGFiYXNlOjp+TG9jYWxTdG9yYWdlRGF0YWJhc2UoKQog
ICAgIEFTU0VSVChtX2lzQ2xvc2VkKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
b3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhdGVneSkKK3Zv
aWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFz
ZSBzaG91bGRDcmVhdGVEYXRhYmFzZSkKIHsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIEFTU0VSVCghbV9mYWls
ZWRUb09wZW5EYXRhYmFzZSk7CiAKLSAgICBpZiAoIXRyeVRvT3BlbkRhdGFiYXNlKG9wZW5pbmdT
dHJhdGVneSkpIHsKKyAgICBpZiAoIXRyeVRvT3BlbkRhdGFiYXNlKHNob3VsZENyZWF0ZURhdGFi
YXNlKSkgewogICAgICAgICBtX2ZhaWxlZFRvT3BlbkRhdGFiYXNlID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTgwLDEwICs5MSwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFi
YXNlOjpvcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5
KQogICAgICAgICBtX3RyYWNrZXItPmRpZE9wZW5EYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0
eU9yaWdpbik7CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRyeVRvT3BlbkRhdGFi
YXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhdGVneSkKK2Jvb2wgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6OnRyeVRvT3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNo
b3VsZENyZWF0ZURhdGFiYXNlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkgJiYgb3Blbmlu
Z1N0cmF0ZWd5ID09IFNraXBJZk5vbkV4aXN0ZW50KQorICAgIGlmICghRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkgJiYgc2hvdWxkQ3JlYXRlRGF0YWJhc2UgPT0gU2hvdWxk
Q3JlYXRlRGF0YWJhc2U6Ok5vKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChtX2Rh
dGFiYXNlUGF0aC5pc0VtcHR5KCkpIHsKQEAgLTExNyw2ICsxMjgsNyBAQCBib29sIExvY2FsU3Rv
cmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBv
cGVuaW5nU3RyYQogCiBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxl
SWZOZWVkZWQoKQogeworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlmICgh
bV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCkBAIC0xNTMsMTk3ICsxNjUsMTc1IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1p
Z3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmltcG9ydEl0ZW1zKFN0b3JhZ2VNYXAmIHN0b3JhZ2VNYXApCitI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMoKSBjb25z
dAogewotICAgIGlmIChtX2RpZEltcG9ydEl0ZW1zKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBGSVhNRTogSWYgaXQgY2FuJ3QgaW1wb3J0LCB0aGVuIHRoZSBkZWZhdWx0IFdlYktpdCBiZWhh
dmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAotICAgIC8vIG5vdCBzaWxl
bnRseSBpZ25vcmluZyBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI1ODk0Ci0KLSAgICAvLyBXZSBzZXQgdGhpcyB0byB0cnVlIGV2ZW4gaWYgd2UgZG9uJ3QgZW5k
IHVwIGltcG9ydGluZyBhbnkgaXRlbXMgZHVlIHRvIGZhaWx1cmUgYmVjYXVzZQotICAgIC8vIHRo
ZXJlJ3MgcmVhbGx5IG5vIGdvb2Qgd2F5IHRvIHJlY292ZXIgb3RoZXIgdGhhbiBub3QgaW1wb3J0
aW5nIGFueXRoaW5nLgotICAgIG1fZGlkSW1wb3J0SXRlbXMgPSB0cnVlOwotCi0gICAgb3BlbkRh
dGFiYXNlKFNraXBJZk5vbkV4aXN0ZW50KTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAi
U0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiX3N0cik7Ci0gICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVkU3RhdGVtZW50
KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOworICAgIGlmICghcXVl
cnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRl
bVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKLQot
ICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5z
dGVwKCk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFN0cmlu
ZyBrZXkgPSBxdWVyeS5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSBx
dWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSk7CisgICAgICAgIFN0cmluZyBrZXkgPSBxdWVy
eS0+Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gcXVlcnktPmdldENv
bHVtbkJsb2JBc1N0cmluZygxKTsKICAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVl
LmlzTnVsbCgpKQogICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2
YWx1ZSkpOwotICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIHJlc3VsdCA9
IHF1ZXJ5LT5zdGVwKCk7CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkg
eworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgcmVhZGluZyBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RvcmFnZU1hcC5pbXBvcnRJdGVtcyhXVEZNb3Zl
KGl0ZW1zKSk7Ci19CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaXRlbURpZENoYW5nZShr
ZXksIHZhbHVlKTsKKyAgICByZXR1cm4gaXRlbXM7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit2b2lkIExvY2FsU3RvcmFnZURh
dGFiYXNlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKQog
ewotICAgIGl0ZW1EaWRDaGFuZ2Uoa2V5LCBTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmNsZWFyKCkKLXsKLSAgICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOwotICAg
IG1fc2hvdWxkQ2xlYXJJdGVtcyA9IHRydWU7Ci0KLSAgICBzY2hlZHVsZURhdGFiYXNlVXBkYXRl
KCk7Ci19CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6OmNsb3NlKCkKLXsKLSAgICBpZiAobV9pc0Nsb3NlZCkKKyAgICBvbGRWYWx1ZSA9IGl0ZW0o
a2V5KTsKKyAgICBpZiAob2xkVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X2lzQ2xvc2VkID0gdHJ1ZTsKIAotICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUp
IHsKLSAgICAgICAgdXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKG1fY2hhbmdlZEl0ZW1z
KTsKLSAgICAgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKKyAgICBhdXRvIGRlbGV0ZVN0YXRl
bWVudCA9IHNjb3BlZFN0YXRlbWVudChtX2RlbGV0ZUl0ZW1TdGF0ZW1lbnQsICJERUxFVEUgRlJP
TSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRlIHN0YXRlbWVudCAt
IGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpOwogCi0gICAg
Ym9vbCBpc0VtcHR5ID0gZGF0YWJhc2VJc0VtcHR5KCk7Ci0KLSAgICBpZiAobV9kYXRhYmFzZS5p
c09wZW4oKSkKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotCi0gICAgaWYgKGlzRW1wdHkp
Ci0gICAgICAgIG1fdHJhY2tlci0+ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG1fc2VjdXJpdHlP
cmlnaW4pOwotfQotCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtRGlkQ2hhbmdlKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG1fY2hhbmdlZEl0
ZW1zLnNldChrZXksIHZhbHVlKTsKLSAgICBzY2hlZHVsZURhdGFiYXNlVXBkYXRlKCk7Ci19Ci0K
LXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKQotewot
ICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUpCisgICAgaW50IHJlc3VsdCA9IGRl
bGV0ZVN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoIW1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9Mb2NhbFN0
b3JhZ2UpCi0gICAgICAgIG1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9M
b2NhbFN0b3JhZ2UgPSBtYWtlVW5pcXVlPFN1ZGRlblRlcm1pbmF0aW9uRGlzYWJsZXI+KCk7Ci0K
LSAgICBtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUgPSB0cnVlOwotCi0gICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBwcm90
ZWN0ZWRUaGlzLT51cGRhdGVEYXRhYmFzZSgpOwotICAgIH0pOworICAgIGlmIChtX2RhdGFiYXNl
U2l6ZSkgeworICAgICAgICBDaGVja2VkVWludDY0IGVudHJ5U2l6ZSA9IGVzdGltYXRlRW50cnlT
aXplKGtleSwgb2xkVmFsdWUpOworICAgICAgICBpZiAoZW50cnlTaXplLmhhc092ZXJmbG93ZWQo
KSB8fCBlbnRyeVNpemUudW5zYWZlR2V0KCkgPj0gKm1fZGF0YWJhc2VTaXplKQorICAgICAgICAg
ICAgKm1fZGF0YWJhc2VTaXplID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKm1fZGF0
YWJhc2VTaXplIC09IGVudHJ5U2l6ZS51bnNhZmVHZXQoKTsKKyAgICB9CiB9CiAKLXZvaWQgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlKCkKK1N0cmluZyBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsKLSAgICBpZiAobV9pc0Ns
b3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRl
ID0gZmFsc2U7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjaGFuZ2VkSXRlbXM7Ci0g
ICAgaWYgKG1fY2hhbmdlZEl0ZW1zLnNpemUoKSA8PSBtYXhpbXVtSXRlbXNUb1VwZGF0ZSkgewot
ICAgICAgICAvLyBUaGVyZSBhcmUgZmV3IGVub3VnaCBjaGFuZ2VkIGl0ZW1zIHRoYXQgd2UgY2Fu
IGp1c3QgYWx3YXlzIHdyaXRlIGFsbCBvZiB0aGVtLgotICAgICAgICBtX2NoYW5nZWRJdGVtcy5z
d2FwKGNoYW5nZWRJdGVtcyk7Ci0gICAgICAgIHVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVt
cyhjaGFuZ2VkSXRlbXMpOwotICAgICAgICBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxl
V3JpdGluZ1RvTG9jYWxTdG9yYWdlID0gbnVsbHB0cjsKLSAgICB9IGVsc2UgewotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1heGltdW1JdGVtc1RvVXBkYXRlOyArK2kpIHsKLSAgICAgICAg
ICAgIGF1dG8gaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigpOwotICAgICAgICAgICAgY2hhbmdl
ZEl0ZW1zLmFkZChpdC0+a2V5LCBpdC0+dmFsdWUpOwotCi0gICAgICAgICAgICBtX2NoYW5nZWRJ
dGVtcy5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGNoYW5nZWRJdGVt
cy5zaXplKCkgPD0gbWF4aW11bUl0ZW1zVG9VcGRhdGUpOworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgICAgICAvLyBSZXNjaGVkdWxlIHRoZSB1cGRhdGUgZm9yIHRoZSByZW1haW5p
bmcgaXRlbXMuCi0gICAgICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLSAgICAgICAgdXBk
YXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNoYW5nZWRJdGVtcyk7CisgICAgYXV0byBxdWVy
eSA9IHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1TdGF0ZW1lbnQsICJTRUxFQ1QgdmFsdWUgRlJP
TSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOworICAgIGlmICghcXVlcnkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGl0ZW0gZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CisgICAgcXVlcnktPmJpbmRUZXh0
KDEsIGtleSk7CisKKyAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKKyAgICBpZiAocmVz
dWx0ID09IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKDApOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgIExPR19F
UlJPUigiRXJyb3IgZ2V0IGl0ZW0gZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVE
YXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNo
YW5nZWRJdGVtcykKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1
b3RhRXhjZXB0aW9uKQogeworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgb3BlbkRhdGFiYXNlKENyZWF0ZUlmTm9u
RXhpc3RlbnQpOworICAgICAgICBvcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2U6Olll
cyk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9zaG91bGRDbGVhckl0ZW1zKSB7Ci0gICAgICAgIG1fc2hvdWxkQ2xlYXJJdGVtcyA9
IGZhbHNlOwotCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhclN0YXRlbWVudChtX2RhdGFi
YXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7Ci0gICAgICAgIGlmIChjbGVhclN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIik7CisgICAgaWYgKG1fcXVvdGFJbkJ5dGVzICE9IFdlYkNvcmU6OlN0b3Jh
Z2VNYXA6Om5vUXVvdGEpIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlU2l6ZSkKKyAgICAgICAg
ICAgIG1fZGF0YWJhc2VTaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6
ZShtX2RhdGFiYXNlUGF0aCk7CisgICAgICAgIGlmICgqbV9kYXRhYmFzZVNpemUgPj0gbV9xdW90
YUluQnl0ZXMpIHsKKyAgICAgICAgICAgIHF1b3RhRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIGludCByZXN1bHQgPSBjbGVhclN0YXRl
bWVudC5zdGVwKCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKKyAgICAgICAgQ2hlY2tlZFVpbnQ2NCBu
ZXdEYXRhYmFzZVNpemUgPSAqbV9kYXRhYmFzZVNpemU7CisgICAgICAgIG5ld0RhdGFiYXNlU2l6
ZSArPSBlc3RpbWF0ZUVudHJ5U2l6ZShrZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKG5ld0RhdGFi
YXNlU2l6ZS5oYXNPdmVyZmxvd2VkKCkgfHwgbmV3RGF0YWJhc2VTaXplLnVuc2FmZUdldCgpID4g
bV9xdW90YUluQnl0ZXMpIHsKKyAgICAgICAgICAgIHF1b3RhRXhjZXB0aW9uID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RhdGFiYXNlU2l6ZSA9IG5l
d0RhdGFiYXNlU2l6ZS51bnNhZmVHZXQoKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
aW5zZXJ0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVT
ICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgIG9sZFZhbHVlID0gaXRlbShrZXkpOworCisgICAgYXV0byBpbnNlcnRTdGF0ZW1l
bnQgPSBzY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRTdGF0ZW1lbnQsICJJTlNFUlQgSU5UTyBJdGVt
VGFibGUgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fu
bm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChkZWxldGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOwotICAgICAgICByZXR1cm47CisgICAgaW5zZXJ0U3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBrZXkpOworICAgIGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMiwgdmFsdWUp
OworCisgICAgaW50IHJlc3VsdCA9IGluc2VydFN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0
ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOworfQor
Citib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNsZWFyU3RhdGVtZW50ID0gc2NvcGVkU3RhdGVtZW50
KG1fY2xlYXJTdGF0ZW1lbnQsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICgh
Y2xlYXJTdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBj
bGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBp
bnQgcmVzdWx0ID0gY2xlYXJTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVt
cyBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGZvciAoYXV0byBpdCA9IGNoYW5nZWRJdGVtcy5i
ZWdpbigpLCBlbmQgPSBjaGFuZ2VkSXRlbXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAvLyBBIG51bGwgdmFsdWUgbWVhbnMgdGhhdCB0aGUga2V5L3ZhbHVlIHBhaXIgc2hvdWxk
IGJlIGRlbGV0ZWQuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50ID0gaXQtPnZh
bHVlLmlzTnVsbCgpID8gZGVsZXRlU3RhdGVtZW50IDogaW5zZXJ0U3RhdGVtZW50OworICAgIG1f
ZGF0YWJhc2VTaXplID0gMDsKIAotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaXQtPmtl
eSk7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UubGFzdENoYW5nZXMoKSA+IDA7Cit9CiAKLSAgICAg
ICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGEga2V5L3ZhbHVlIHBhaXIsIGJpbmQgdGhlIHZhbHVl
IGFzIHdlbGwuCi0gICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAg
c3RhdGVtZW50LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7Cit2b2lkIExvY2FsU3RvcmFnZURhdGFi
YXNlOjpjbG9zZSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYg
KG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKIAot
ICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBk
YXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGJvb2wgaXNFbXB0eSA9IGRhdGFiYXNl
SXNFbXB0eSgpOwogCi0gICAgICAgIHN0YXRlbWVudC5yZXNldCgpOwotICAgIH0KKyAgICBtX2Ns
ZWFyU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc2VydFN0YXRlbWVudCA9IG51bGxwdHI7
CisgICAgbV9nZXRJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2dldEl0ZW1zU3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX2RlbGV0ZUl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOwogCi0g
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKKworICAgIGlmIChpc0VtcHR5KQorICAgICAgICBt
X3RyYWNrZXItPmRlbGV0ZURhdGFiYXNlV2l0aE9yaWdpbihtX3NlY3VyaXR5T3JpZ2luKTsKIH0K
IAotYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkKK2Jvb2wgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiB7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM2Miw0ICszNTIsMjkgQEAgYm9vbCBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkKICAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVt
bkludCgwKTsKIH0KIAordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3Rpbmco
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBvcGVuRGF0YWJhc2UoU2hvdWxkQ3Jl
YXRlRGF0YWJhc2U6Ok5vKTsKKworICAgIC8vIFByZXdhcm0gdGhlIGdldEl0ZW1zIHN0YXRlbWVu
dCBmb3IgcGVyZm9ybWFuY2Ugc2luY2UgdGhlIHBhZ2VzIGJsb2NrIHN5bmNocm9ub3VzbHkgb24g
cmV0cmlldmluZyB0aGUgaXRlbXMuCisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3RhdGVtZW50LCBnZXRJdGVtc1F1ZXJ5U3Ry
aW5nKTsKK30KKworU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiYg
c3RhdGVtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIHN0YXRlbWVu
dCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAg
ICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZSB7IH07CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKaW5kZXggMjRjZTE3NDY0ZTE5Yzc5OTli
ZDY4NGI3YWI2Mjk2NzY0ZDJmNWU5YS4uOTlmMTkwYWU5MWMxNWEwNTQ1NjAwMDBhOTY5MzgzMDQz
NTM0Y2Q0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsMTYgKzI2LDE0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTdG9yYWdl
TWFwOworY2xhc3MgU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGU7CiBjbGFzcyBTdWRkZW5U
ZXJtaW5hdGlvbkRpc2FibGVyOworCitzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ0LDU1ICs0Miw0OCBAQCBjbGFzcyBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI7CiAKIGNsYXNzIExvY2FsU3RvcmFnZURhdGFiYXNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PExvY2FsU3RvcmFnZURhdGFiYXNlPiBjcmVhdGUoUmVmPFdvcmtRdWV1ZT4mJiwgUmVmPExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJik7CisgICAgc3RhdGljIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gY3JlYXRlKFJlZjxX
b3JrUXVldWU+JiYsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7CiAgICAg
fkxvY2FsU3RvcmFnZURhdGFiYXNlKCk7CiAKLSAgICAvLyBXaWxsIGJsb2NrIHVudGlsIHRoZSBp
bXBvcnQgaXMgY29tcGxldGUuCi0gICAgdm9pZCBpbXBvcnRJdGVtcyhXZWJDb3JlOjpTdG9yYWdl
TWFwJik7Ci0KLSAgICB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwotICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSk7Ci0gICAg
dm9pZCBjbGVhcigpOwotCi0gICAgdm9pZCB1cGRhdGVEYXRhYmFzZSgpOworICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGl0ZW1zKCkgY29uc3Q7CisgICAgdm9pZCBvcGVuSWZFeGlzdGluZygp
OworICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiBvbGRWYWx1
ZSk7CisgICAgYm9vbCBjbGVhcigpOworICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYga2V5
KSBjb25zdDsKKyAgICB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKIAogICAg
IC8vIFdpbGwgYmxvY2sgdW50aWwgYWxsIHBlbmRpbmcgY2hhbmdlcyBoYXZlIGJlZW4gd3JpdHRl
biB0byBkaXNrLgogICAgIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKLSAgICBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKTsKKyAgICBMb2NhbFN0
b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCB1bnNpZ25lZCBx
dW90YUluQnl0ZXMpOwogCi0gICAgZW51bSBEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSB7Ci0gICAg
ICAgIENyZWF0ZUlmTm9uRXhpc3RlbnQsCi0gICAgICAgIFNraXBJZk5vbkV4aXN0ZW50Ci0gICAg
fTsKLSAgICBib29sIHRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5KTsK
LSAgICB2b2lkIG9wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7CisgICAgZW51
bSBjbGFzcyBTaG91bGRDcmVhdGVEYXRhYmFzZSA6IGJvb2wgeyBObywgWWVzIH07CisgICAgYm9v
bCB0cnlUb09wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZSk7CisgICAgdm9pZCBvcGVu
RGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2UpOwogCiAgICAgYm9vbCBtaWdyYXRlSXRlbVRh
YmxlSWZOZWVkZWQoKTsKKyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0gICAg
dm9pZCBpdGVtRGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLQotICAgIHZvaWQgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRl
RGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7
Ci0KLSAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OwogCiAgICAg
UmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyPiBtX3RyYWNrZXI7CiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fc2VjdXJp
dHlPcmlnaW47CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7Ci0gICAgV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlIG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAwIH07CiAgICAg
Ym9vbCBtX2ZhaWxlZFRvT3BlbkRhdGFiYXNlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGlkSW1w
b3J0SXRlbXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07Ci0KLSAg
ICBib29sIG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X3Nob3VsZENsZWFySXRlbXMgeyBmYWxzZSB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IG1fY2hhbmdlZEl0ZW1zOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX2RhdGFiYXNlU2l6ZTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdWRkZW5UZXJtaW5hdGlvbkRpc2FibGVy
PiBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxlV3JpdGluZ1RvTG9jYWxTdG9yYWdlOwor
ICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9j
bGVhclN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1faW5zZXJ0U3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVtU3RhdGVtZW50OworICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVt
c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fZGVsZXRlSXRlbVN0YXRlbWVudDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFj
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmNwcAppbmRleCAyZDQzMWQ1YjliZmQ2NWE3NzMwMzE4MzA4M2Y2MzEzOGVm
YzM1NzQ5Li42MDE1M2JmN2Q2YjA3ZjU4ZTBlYTE1OTVhMTRmYzhjODEzNTNjMTQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
TmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNzMsMTAgKzczLDggQEAgdm9pZCBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHZvaWQgTG9jYWxTdG9y
YWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3Jp
Z2luKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChhdXRvKiBz
dG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpIHsKLSAgICAgICAgc3Rv
cmFnZUFyZWEtPnN5bmNUb0RhdGFiYXNlKCk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VBcmVhID0g
bV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNsb3Nl
KCk7Ci0gICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCmluZGV4IDZhNzZkNzcwOTZjYjJhMzRhZTk4
ZDdmNzAzMWMwMjlmOGM4Mjg4ZDEuLmMzNDE3YTQyOWViYzNkYmE3ZDMwYjM3OTVkMDAxNDNiYTgx
NWU5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIApAQCAtNDAsMTEgKzQxLDEyIEBAIFN0b3JhZ2VBcmVhOjpTdG9yYWdl
QXJlYShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSwgY29uc3Qg
U2VjCiAgICAgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZShtYWtlV2Vha1B0cihsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UpKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKICAg
ICAsIG1fcXVvdGFJbkJ5dGVzKHF1b3RhSW5CeXRlcykKLSAgICAsIG1fc3RvcmFnZU1hcChTdG9y
YWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpKQogICAgICwgbV9pZGVudGlmaWVyKElkZW50
aWZpZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAg
ICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwog
fQogCiBTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKQEAgLTYxLDcgKzYzLDcgQEAgdm9pZCBT
dG9yYWdlQXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0
aW9uSUQpCiAgICAgQVNTRVJUKCFtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKGNvbm5lY3Rpb25J
RCkpOwogCiAgICAgaWYgKG1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpICYmICFpc0VwaGVtZXJh
bCgpKQotICAgICAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7CisgICAg
ICAgIGVuc3VyZURhdGFiYXNlKCk7CiAKICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChjb25uZWN0
aW9uSUQpOwogfQpAQCAtNzQsMTEgKzc2LDggQEAgdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlTGlz
dGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQpCiAgICAgaWYgKCFt
X2V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFt
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3luY1RvRGF0
YWJhc2UoKTsKLSAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFyZWEo
bV9zZWN1cml0eU9yaWdpbik7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQorICAg
ICAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFyZWEobV9zZWN1cml0
eU9yaWdpbik7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWE6Omhhc0xpc3RlbmVyKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKSBjb25zdApAQCAtMTAxLDc0ICsxMDAsNzUgQEAg
c3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25zdAog
dm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJj
ZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwogCiAg
ICAgU3RyaW5nIG9sZFZhbHVlOwotCi0gICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdl
TWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7Ci0gICAg
aWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3Rv
cmFnZU1hcCk7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgYXV0byBuZXdTdG9y
YWdlTWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90
YUV4Y2VwdGlvbik7CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAgbV9z
dG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW5zdXJlRGF0YWJhc2UoKS5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2Vw
dGlvbik7CiAKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFi
YXNlLT5zZXRJdGVtKGtleSwgdmFsdWUpOwotCiAgICAgZGlzcGF0Y2hFdmVudHMoc291cmNlQ29u
bmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJp
bmcpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9y
YWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5EYXRhYmFzZUFu
ZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBhdXRv
IG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7
Ci0gICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUo
bmV3U3RvcmFnZU1hcCk7Ci0KKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBhdXRv
IG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7
CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0g
V1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5zdXJlRGF0YWJh
c2UoKS5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwogICAgIGlmIChvbGRWYWx1ZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0g
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnJlbW92ZUl0ZW0oa2V5KTsKLQogICAgIGRp
c3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9s
ZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYTo6Y2xl
YXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJl
YUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJhc2VB
bmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNy
ZWF0ZShtX3F1b3RhSW5CeXRlcyk7CiAKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkK
LSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xlYXIoKTsKKyAgICBpZiAoaXNFcGhl
bWVyYWwoKSkgeworICAgICAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VN
YXAtPmNsZWFyKCkpCisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3Jh
Z2VNYXApOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZW5zdXJlRGF0YWJhc2UoKS5jbGVh
cigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGRpc3BhdGNoRXZlbnRzKHNv
dXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0
cmluZygpLCB1cmxTdHJpbmcpOwogfQogCi1jb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
U3RvcmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFN0b3Jh
Z2VBcmVhOjppdGVtcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworICAgIGlmIChpc0Vw
aGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5pdGVtcygpOwogCi0gICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKKyAgICByZXR1cm4gZW5zdXJlRGF0YWJhc2Uo
KS5pdGVtcygpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcigpCiB7CiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3Jl
YXRlKG1fcXVvdGFJbkJ5dGVzKTsKLQotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7
Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7Ci0gICAgICAgIG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2UgPSBudWxscHRyOworICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7Cisg
ICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkpCisg
ICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CisgICAgICAgICAg
ICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOworICAgICAgICAgICAgbV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1
dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJzLmJlZ2luKCksIGVuZCA9IG1fZXZlbnRMaXN0ZW5lcnMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTc5LDIyICsxNzksMTcgQEAgdm9pZCBTdG9y
YWdlQXJlYTo6Y2xlYXIoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6b3BlbkRhdGFi
YXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0CitMb2NhbFN0b3JhZ2VEYXRhYmFzZSYg
U3RvcmFnZUFyZWE6OmVuc3VyZURhdGFiYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQotICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCFpc0VwaGVtZXJhbCgpKTsKIAogICAgIEFTU0VSVChtX2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyKCkpOwogICAgIC8vIFdlIG9wZW4gdGhlIGRhdGFiYXNlIGhlcmUgZXZlbiBpZiB3
ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91ciBpdGVtcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YWJh
c2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRvIHdyaXRlIHRvIGl0LgotICAgIGlmICghbV9sb2NhbFN0
b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IExvY2FsU3Rv
cmFnZURhdGFiYXNlOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksICptX2xvY2FsU3RvcmFnZU5h
bWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKCks
IG1fc2VjdXJpdHlPcmlnaW4pOwotCi0gICAgaWYgKG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJh
c2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmltcG9y
dEl0ZW1zKCptX3N0b3JhZ2VNYXApOwotICAgIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJhc2Ug
PSB0cnVlOworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgeworICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX3F1ZXVl
LmNvcHlSZWYoKSwgKm1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5s
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoKSwgbV9zZWN1cml0eU9yaWdpbiwgbV9xdW90YUlu
Qnl0ZXMpOworICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5vcGVuSWZFeGlzdGluZygp
OworICAgIH0KKyAgICByZXR1cm4gKm1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7CiB9CiAKIHZvaWQg
U3RvcmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291
cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJ
RCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmlu
ZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdApAQCAtMjExLDE0ICsy
MDYsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0bwogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdl
QXJlYTo6c3luY1RvRGF0YWJhc2UoKQotewotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+dXBkYXRl
RGF0YWJhc2UoKTsKLX0KLQogdm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlmICgh
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggMjFkNDg1OTljZWRkZjE0YzY0
NjY4M2I4MzRkYzUxMGEyMmM2YTJjZS4uZmQ1ZjEyMjJiMWMwYjdlNWU0YjZhMTAzYTg0ZDk1ODFk
M2NmNDFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmgKQEAgLTYzLDIzICs2MywyMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOwogCi0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1z
KCkgY29uc3Q7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsKICAg
ICB2b2lkIGNsZWFyKCk7CiAKICAgICBib29sIGlzRXBoZW1lcmFsKCkgY29uc3QgeyByZXR1cm4g
IW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CiAKLSAgICB2b2lkIG9wZW5EYXRhYmFzZUFuZElt
cG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc3luY1RvRGF0YWJhc2UoKTsK
ICAgICB2b2lkIGNsb3NlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7CiAK
KyAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZSYgZW5zdXJlRGF0YWJhc2UoKSBjb25zdDsKKwogICAg
IC8vIFdpbGwgYmUgbnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9uZ3MgdG8gYSBzZXNzaW9u
IHN0b3JhZ2UgbmFtZXNwYWNlIG9yIHRoZSBzdG9yYWdlIGFyZWEgaXMgaW4gYW4gZXBoZW1lcmFs
IHNlc3Npb24uCiAgICAgV2Vha1B0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+IG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlOwogICAgIG11dGFibGUgUmVmUHRyPExvY2FsU3RvcmFnZURhdGFiYXNlPiBt
X2xvY2FsU3RvcmFnZURhdGFiYXNlOwotICAgIG11dGFibGUgYm9vbCBtX2RpZEltcG9ydEl0ZW1z
RnJvbURhdGFiYXNlIHsgZmFsc2UgfTsKIAogICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSBtX3NlY3VyaXR5T3JpZ2luOwogICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyU2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKaW5kZXggNWJmNjg3ZjQ5ZjkzMThmNWU3ODFkMzBkMjBl
ZjcxNzFiY2EyZTEwNC4uNjQ5OTgyODZlOTk5ZTBlNzI0ZGNlNDM5OTM4Nzk4ZjI3ODZkMDY1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCkBAIC0xNDcsMTIgKzE0Nyw3IEBAIHZvaWQgU3Rv
cmFnZU1hbmFnZXJTZXQ6OndhaXRVbnRpbFN5bmNpbmdMb2NhbFN0b3JhZ2VGaW5pc2hlZCgpCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1h
cGhvcmU7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsICZzZW1hcGhvcmVdIHsKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZUFyZWEpOwotICAgICAgICAgICAgaWYgKHN0
b3JhZ2VBcmVhKQotICAgICAgICAgICAgICAgIHN0b3JhZ2VBcmVhLT5zeW5jVG9EYXRhYmFzZSgp
OwotICAgICAgICB9CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmVdIHsKICAgICAg
ICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0pOwogICAgIHNlbWFwaG9yZS53YWl0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmluZGV4
IDAwNTdkY2NlOGU0ZjQ3ZjBlYzdhYWM3MzUyOGI5MDI4Yzk4NTBhYmQuLjk2ZjhmZDA2ZTcxYTA4
OTIzMzVjY2QxMzAyNTQ2Y2I2NDFhZGQ4OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBTdG9y
YWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkKICAgICBpZiAoIW1fc3RvcmFn
ZU1hcC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHF1b3RhID0g
bV9zdG9yYWdlTWFwLT5xdW90YSgpOwotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNy
ZWF0ZShxdW90YSk7CisgICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+
Y2xlYXIoKSkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsK
IAogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xlYXIoKTsKQEAgLTIxNCwxMCArMjE0LDggQEAgdm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
ICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKLSAgICBpZiAobV9zdG9yYWdl
TWFwLT5sZW5ndGgoKSkgewotICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3Rh
KTsKLSAgICB9CisgICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+Y2xl
YXIoKSkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKIAog
ICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykgewogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVDbGVhcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427177</attachid>
            <date>2021-04-27 11:33:42 -0700</date>
            <delta_ts>2021-04-27 11:48:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225065-20210427113341.patch</filename>
            <type>text/plain</type>
            <size>41637</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmE0YjRhODhkNTJmZjIx
Y2IwMmU0ODI4OWJlN2NmYTRkZTJlMTBjZi4uMTZiYzVkMTNmNjU4ZDFjY2Y3YmM0N2Y5ZDA4M2Ix
MjhkMDU0ZmQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2VlcCBsb2NhbCBz
dG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6
CisgICAgICAgIEV4cG9ydCBhIGNvdXBsZSBtb3JlIHN5bWJvbHMuCisKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6Y2xlYXIp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5oOgorICAgICAgICBBZGQgYSBjbGVhcigp
IGZ1bmN0aW9uIHRvIFN0b3JhZ2VNYXAgc28gdGhhdCBTdG9yYWdlQXJlYSBkb2Vzbid0IHJlY29u
c3RydWN0IGEKKyAgICAgICAgbmV3IFN0b3JhZ2VNYXAgb2JqZWN0IHVubmVjZXNzYXJpbHkgd2hl
bjoKKyAgICAgICAgLSBUaGUgU3RvcmFnZU1hcCBpcyBub3Qgc2hhcmVkCisgICAgICAgIC0gVGhl
IFN0b3JhZ2VNYXAgaXMgZW1wdHkgKGFuZCBjbGVhcigpIGlzIGEgbm8tb3ApCisKIDIwMjEtMDQt
MjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc2sgTG9jYWxT
dG9yYWdlIGRhdGFiYXNlIHRvIGZyZWUgYXMgbXVjaCBtZW1vcnkgYXMgcG9zc2libGUgb24gbWVt
b3J5IHByZXNzdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkN2ZlMzhhOTc2NTJiMzdmYzM2ZTBkYzIxNWVkNDRi
YzIxYTEyOTkuLmE2ODQzZDI4ZjFjNGFiN2JjYThlYjU1ODkzNjMzYWJkNmVjNmMzNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMjEtMDQtMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBEb24ndCBrZWVwIGxvY2FsIHN0b3JhZ2UgZGF0YSBpbiBtZW1v
cnkgaW4gdGhlIE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjUwNjUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlz
dGVuc2VuLgorCisgICAgICAgIFdoZW4gYSBXZWJQYWdlIHdvdWxkIHN0YXJ0IHRvIHVzZSB0aGUg
bG9jYWwgc3RvcmFnZSBBUEksIHRoZSBXZWJQcm9jZXNzCisgICAgICAgIHdvdWxkIHNlbmQgYSBz
eW5jIElQQyB0byB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmV0cmlldmUgYWxsIHRoZSBsb2NhbAor
ICAgICAgICBzdG9yYWdlIGVudHJpZXMgZm9yIHRoZSBvcmlnaW4uIFRoZSBOZXR3b3JrUHJvY2Vz
cyB3b3VsZCByZWFkIHRob3NlCisgICAgICAgIGVudHJpZXMgZnJvbSBhIFNRTGl0ZSBkYXRhYmFz
ZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgIEJvdGggdGhl
IE5ldHdvcmtQcm9jZXNzIHdvdWxkIGtlZXAgdGhlIGVudHJpZXMgaW4gbWVtb3J5LCBpbiBhCisg
ICAgICAgIFN0b3JhZ2VNYXAgb2JqZWN0ICh3aGljaCBpcyBiYXNpY2FsbHkgYSBIYXNoTWFwKS4g
T24gc29tZSBzaXRlcywgdGhlCisgICAgICAgIHN0cmluZ3MgaW4gdGhlIGxvY2FsIHN0b3JhZ2Ug
bWF5IGJlIHZlcnkgbGFyZ2UuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlCisgICAgICAgIFdlYlByb2Nl
c3MgdG8ga2VlcCB0aGVtIGluIG1lbW9yeSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZXNwZWNp
YWxseQorICAgICAgICBjb25zaWRlcmluZyB0aGF0IHRoZSBXZWIgQVBJIGlzIHN5bmNocm9ub3Vz
LiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWFsCisgICAgICAgIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IG1lbW9yeSBpbiB0aGUgTmV0d29yayBQcm9jZXNzIHNpZGUsIGVzcGVjaWFsbHkKKyAgICAgICAg
Z2l2ZW4gdGhhdCB0aGUgV2ViUHJvY2VzcyBhbHJlYWR5IGhhcyBpdHMgb3duIGNvcHkuIE9uIHRo
ZSBuZXR3b3JrCisgICAgICAgIHByb2Nlc3Mgc2lkZSwgd2UgY2FuIGdldCByaWQgb2YgdGhlIFN0
b3JhZ2VNYXAgZW50aXJlbHkgaW4gdGhlIGxvY2FsCisgICAgICAgIHN0b3JhZ2UgY2FzZSBhbmQg
MTAwJSByZWx5IG9uIHRoZSBTUUxpdGUgZGF0YWJhc2UuIFRoaXMgaXMgd2hhdCB0aGlzCisgICAg
ICAgIHBhdGNoIGltcGxlbWVudHMuCisKKyAgICAgICAgQS9CIHRlc3Rpbmcgc2hvd3MgdGhpcyBp
cyBhIDItMyUgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyLiBUaGVyZSBkb2VzCisgICAgICAgIG5v
dCBhcHBlYXIgdG8gYmUgYSBtZWFuaW5nZnVsIHByb2dyZXNzaW9uIG9uIFBMVU0gc2FkbHkuIFRo
aXMgaXMgYWxzbworICAgICAgICBuZXV0cmFsIG9uIFBMVC4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojplc3RpbWF0ZUVudHJ5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURh
dGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
TG9jYWxTdG9yYWdlRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
aXRlbSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3Qp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuaDoKKyAgICAgICAgLSBVcGRhdGUgTG9jYWxTdG9yYWdlRGF0YWJhc2UgQVBJIHRvIG1hdGNo
IG1vcmUgY2xvc2VseSB0aGUgQVBJIG9mCisgICAgICAgICAgU3RvcmFnZU1hcC4gVGhpcyB3YXkg
U3RvcmFnZUFyZWEgY2FuIHJlbHkgb24gdGhlIExvY2FsU3RvcmFnZURhdGFiYXNlCisgICAgICAg
ICAgZW50aXJlbHkgaW5zdGVhZCBvZiB0aGUgU3RvcmFnZU1hcCB3aXRoIG1pbmltYWwgY2hhbmdl
cy4KKyAgICAgICAgLSBBZGQgcXVvdGEgc3VwcG9ydCBzaW1pbGFybHkgdG8gd2hhdCBpcyBkb25l
IGluIFN0b3JhZ2VBcmVhIHNvIHRoYXQKKyAgICAgICAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
c2V0SXRlbSgpIGZhaWxzIHdoZW4gdGhlIHF1b3RhIGlzIHJlYWNoZWQuCisgICAgICAgIC0gQ2Fj
aGUgdGhlIFNRTGl0ZVN0YXRlbWVudHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKToK
KyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBzeW5jVG9EYXRhYmFzZSgpIGJlZm9y
ZSBjbG9zaW5nIHNpbmNlCisgICAgICAgIExvY2FsU3RvcmFnZURhdGFiYXNlIG5vIGxvbmdlciBo
YXMgYSBxdWV1ZSBvbiBwZW5kaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmFkZExp
c3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjppdGVtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjplbnN1cmVEYXRhYmFzZSBjb25zdCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oOgorICAgICAgICBJ
ZiB0aGUgU3RvcmFnZUFyZWEgaXMgdXNlZCBmb3IgbG9jYWwgc3RvcmFnZSwgd2Ugbm93IGRvbid0
IGV2ZW4gaW5pdGlhbGl6ZQorICAgICAgICBhIFN0b3JhZ2VNYXAgYW5kIHJlbHkgZW50aXJlbHkg
b24gTG9jYWxTdG9yYWdlRGF0YWJhc2UuIElmIHRoZSBTdG9yYWdlQXJlYQorICAgICAgICBpcyB1
c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UsIHdlIGtlZXAgdXNpbmcgYSBTdG9yYWdlTWFwIHNpbmNl
IHRoZXJlIGlzIG5vCisgICAgICAgIGJhY2tpbmcgZGF0YWJhc2UuIFRoaXMgaXMgZmFpcmx5IHN0
cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIEkgdXBkYXRlZCB0aGUKKyAgICAgICAgTG9jYWxTdG9yYWdl
RGF0YWJhc2UgQVBJIHRvIG1hdGNoIGZhaXJseSBjbG9zZWx5IHRoZSBTdG9yYWdlTWFwIG9uZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKToKKwogMjAyMS0wNC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFzayBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgdG8gZnJl
ZSBhcyBtdWNoIG1lbW9yeSBhcyBwb3NzaWJsZSBvbiBtZW1vcnkgcHJlc3N1cmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKaW5kZXggYzgyMWYxNjE0NzY4NzQ2MzYyMWQwMTZlMmQzNWRhNjlmZWQ0ZTg5Yy4u
MDZjZTlhOTIyOGQ1MzI0OWM3MzIyZGFlYmJhNjNiMWEwODlkOGE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFnZSBkYXRhIGluIG1l
bW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTA2NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgorICAgICAgICBVc2UgdGhl
IG5ldyBTdG9yYWdlTWFwOjpjbGVhcigpIHRvIGF2b2lkIGNvbnN0cnVjdGluZyBhIG5ldyBTdG9y
YWdlTWFwIHVubmVjZXNzYXJpbHkKKyAgICAgICAgd2hlbjoKKyAgICAgICAgLSBUaGUgU3RvcmFn
ZU1hcCBpcyBub3Qgc2hhcmVkCisgICAgICAgIC0gVGhlIFN0b3JhZ2VNYXAgaXMgZW1wdHkKKwog
MjAyMS0wNC0yNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVwZGF0ZSBNYWMtc3BlY2lmaWMgQ01ha2UgZmlsZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggMjcxODJiODM0MWY5ODdlOTJl
OTkzZWVhYzkxMDFmMDFkY2JiZTFlNi4uZDNkMDY5NmRiZjViMGYwZDY2MGI3MDg1MjBmYTYzYTk5
ODAyOGU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYjsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKIAotICAgIHZv
aWQgdXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlTGFzdENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRl
Q29tbWFuZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0
KGNvbnN0IFN0cmluZyYpOwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBpbnRlcnJ1cHQoKTsKIAogICAgIGludDY0X3QgbGFzdEluc2VydFJvd0lEKCk7
Ci0gICAgaW50IGxhc3RDaGFuZ2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxhc3RDaGFu
Z2VzKCk7CiAKICAgICB2b2lkIHNldEJ1c3lUaW1lb3V0KGludCBtcyk7CiAgICAgdm9pZCBzZXRC
dXN5SGFuZGxlcihpbnQoKikodm9pZCosIGludCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggZGRiZTIyMTBkYzVlZjg1MjIyNmNhNjlk
NDkxNmNiMmUxMWUyMDIzNy4uOWZmOWU4ZjFmMTY1NGY4MmRiM2Q2NmFjNTZjODA2MGVjZWQ2MWQx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5o
CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZURhdGFi
YXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSk7CiAjZW5kaWYKICAgICAKLSAgICBzdGF0aWMgbG9u
ZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxX
YWxsVGltZT4gZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkYXRhYmFzZU1vZGlm
aWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VNYXAuY3BwCmluZGV4IGQ0N2M3MmIwNmVmZmFlNGMyNzY5Yjc2Mjc2YjMxNDFmYmQ2
ZmRiNzYuLmE4NDE0OWUwZjEzN2QxOTVlZjU5NGZhNmM5MmQwZTBhMWY4ZDM0NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApAQCAtMTc1LDYgKzE3NSwxOCBAQCBSZWZQdHI8
U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgU3Ry
aW5nJiBvbGRWYWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFN0b3JhZ2VN
YXA+IFN0b3JhZ2VNYXA6OmNsZWFyKCkKK3sKKyAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13cml0
ZSBzZW1hbnRpY3MgaGVyZS4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2Yg
U3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3JhZ2Ugb2JqZWN0cworICAgIC8vIHNvIGlmIG1vcmUg
dGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0
YXRpbmcgaXQuCisgICAgaWYgKHJlZkNvdW50KCkgPiAxICYmICFtX21hcC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YVNpemUpOworCisgICAgbV9t
YXAuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRMZW5ndGggPSAwOworICAgIHJldHVybiBudWxscHRy
OworfQorCiBib29sIFN0b3JhZ2VNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dAogewogICAgIHJldHVybiBtX21hcC5jb250YWlucyhrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuaAppbmRleCA0ZWE5ZTc4OTZjYWZhNzY5OTBlNTkwYzhiOTVkMzcxNDczMjBiMTlj
Li4yMmU5NzViOWNmZGY0ZWVmNzY1ZjkxMjc0ZTEzZGZlMDk2ZTI4MTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9u
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5n
UXVvdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0
cmluZyYgb2xkVmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBj
bGVhcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IGRiYmI4
MmUwNDczNTAwM2RlY2ZiYzU1NWE0NmE0YzI1ZDQ1ZmQ4OWUuLjlmYmZhMjZiZWU3YjkwNjczMmM2
NmFlZmRlYWM3MjI4NGM2ZTQyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTMsIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywzNSArMjcsNDUgQEAKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VEYXRhYmFzZS5oIgogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU3VkZGVuVGVybWluYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotc3RhdGljIGNvbnN0IGF1dG8gZGF0YWJhc2VVcGRhdGVJbnRlcnZhbCA9
IDFfczsKLQotc3RhdGljIGNvbnN0IGludCBtYXhpbXVtSXRlbXNUb1VwZGF0ZSA9IDEwMDsKLQog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPExvY2Fs
U3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVl
dWU+JiYgcXVldWUsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwg
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyBjb25zdCBj
aGFyIGdldEl0ZW1zUXVlcnlTdHJpbmdbXSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1U
YWJsZSI7CisKK3N0YXRpYyBDaGVja2VkVWludDY0IGVzdGltYXRlRW50cnlTaXplKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIENoZWNrZWRVaW50NjQgZW50
cnlTaXplOworICAgIGVudHJ5U2l6ZSArPSBrZXkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOwor
ICAgIGVudHJ5U2l6ZSArPSB2YWx1ZS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgcmV0
dXJuIGVudHJ5U2l6ZTsKK30KKworUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJlZjxMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBz
ZWN1cml0eU9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IExvY2FsU3RvcmFnZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRy
YWNrZXIpLCBzZWN1cml0eU9yaWdpbikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExvY2Fs
U3RvcmFnZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRyYWNrZXIpLCBzZWN1cml0
eU9yaWdpbiwgcXVvdGFJbkJ5dGVzKSk7CiB9CiAKLUxvY2FsU3RvcmFnZURhdGFiYXNlOjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8TG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2Vj
dXJpdHlPcmlnaW4pCitMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6TG9jYWxTdG9yYWdlRGF0YWJhc2Uo
UmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4m
JiB0cmFja2VyLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNp
Z25lZCBxdW90YUluQnl0ZXMpCiAgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogICAgICwg
bV90cmFja2VyKFdURk1vdmUodHJhY2tlcikpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3Vy
aXR5T3JpZ2luKQogICAgICwgbV9kYXRhYmFzZVBhdGgobV90cmFja2VyLT5kYXRhYmFzZVBhdGgo
bV9zZWN1cml0eU9yaWdpbikpCisgICAgLCBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC02NiwxMiArNzYsMTMgQEAg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiAgICAgQVNTRVJU
KG1faXNDbG9zZWQpOwogfQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJh
c2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQordm9pZCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNob3VsZENy
ZWF0ZURhdGFiYXNlKQogeworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFT
U0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgQVNTRVJUKCFtX2ZhaWxlZFRvT3BlbkRh
dGFiYXNlKTsKIAotICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uob3BlbmluZ1N0cmF0ZWd5KSkg
eworICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uoc2hvdWxkQ3JlYXRlRGF0YWJhc2UpKSB7CiAg
ICAgICAgIG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtODAsMTAgKzkxLDEwIEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5E
YXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kpCiAgICAgICAg
IG1fdHJhY2tlci0+ZGlkT3BlbkRhdGFiYXNlV2l0aE9yaWdpbihtX3NlY3VyaXR5T3JpZ2luKTsK
IH0KIAotYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoRGF0YWJh
c2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQorYm9vbCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hvdWxkQ3JlYXRl
RGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKCFG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBvcGVuaW5nU3RyYXRlZ3kg
PT0gU2tpcElmTm9uRXhpc3RlbnQpCisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1f
ZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRDcmVhdGVEYXRhYmFzZSA9PSBTaG91bGRDcmVhdGVEYXRh
YmFzZTo6Tm8pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fZGF0YWJhc2VQYXRo
LmlzRW1wdHkoKSkgewpAQCAtMTE3LDYgKzEyOCw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJh
CiAKIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgp
CiB7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKCFtX2RhdGFiYXNl
LnRhYmxlRXhpc3RzKCJJdGVtVGFibGUiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1
MywxOTcgKzE2NSwxNzUgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1U
YWJsZUlmTmVlZGVkKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKK0hhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtcygpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fZGlkSW1wb3J0SXRlbXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJ
ZiBpdCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3Vs
ZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVudGx5IGlnbm9y
aW5nIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKLQot
ICAgIC8vIFdlIHNldCB0aGlzIHRvIHRydWUgZXZlbiBpZiB3ZSBkb24ndCBlbmQgdXAgaW1wb3J0
aW5nIGFueSBpdGVtcyBkdWUgdG8gZmFpbHVyZSBiZWNhdXNlCi0gICAgLy8gdGhlcmUncyByZWFs
bHkgbm8gZ29vZCB3YXkgdG8gcmVjb3ZlciBvdGhlciB0aGFuIG5vdCBpbXBvcnRpbmcgYW55dGhp
bmcuCi0gICAgbV9kaWRJbXBvcnRJdGVtcyA9IHRydWU7Ci0KLSAgICBvcGVuRGF0YWJhc2UoU2tp
cElmTm9uRXhpc3RlbnQpOworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5
LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfc3RyKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1lbnQobV9nZXRJdGVt
c1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CisgICAgaWYgKCFxdWVyeSkgewogICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9y
IGxvY2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1zOwotCi0gICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IHF1
ZXJ5LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENv
bHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LT5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKDEpOwogICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgICAgICBpdGVtcy5hZGQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0
ZXAoKTsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciByZWFkaW5n
IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBzdG9yYWdlTWFwLmltcG9ydEl0ZW1zKFdURk1vdmUoaXRlbXMpKTsK
LX0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpdGVtRGlkQ2hhbmdlKGtleSwgdmFsdWUp
OworICAgIHJldHVybiBpdGVtczsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVt
b3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJl
bW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiB7Ci0gICAgaXRl
bURpZENoYW5nZShrZXksIFN0cmluZygpKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZTo6Y2xlYXIoKQotewotICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRD
bGVhckl0ZW1zID0gdHJ1ZTsKLQotICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLX0KKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2Uo
KQotewotICAgIGlmIChtX2lzQ2xvc2VkKQorICAgIG9sZFZhbHVlID0gaXRlbShrZXkpOworICAg
IGlmIChvbGRWYWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNDbG9zZWQg
PSB0cnVlOwogCi0gICAgaWYgKG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkgewotICAgICAg
ICB1cGRhdGVEYXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMobV9jaGFuZ2VkSXRlbXMpOwotICAgICAg
ICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOworICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gc2Nv
cGVkU3RhdGVtZW50KG1fZGVsZXRlSXRlbVN0YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJs
ZSBXSEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdy
aXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBkZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSk7CiAKLSAgICBib29sIGlzRW1w
dHkgPSBkYXRhYmFzZUlzRW1wdHkoKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQot
ICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0KLSAgICBpZiAoaXNFbXB0eSkKLSAgICAgICAg
bV90cmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7Ci19
Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1EaWRDaGFuZ2UoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9jaGFuZ2VkSXRlbXMuc2V0KGtl
eSwgdmFsdWUpOwotICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLX0KLQotdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpCi17Ci0gICAgaWYgKG1f
ZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkKKyAgICBpbnQgcmVzdWx0ID0gZGVsZXRlU3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRh
YmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICgh
bV9kaXNhYmxlU3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSkKLSAg
ICAgICAgbV9kaXNhYmxlU3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFn
ZSA9IG1ha2VVbmlxdWU8U3VkZGVuVGVybWluYXRpb25EaXNhYmxlcj4oKTsKLQotICAgIG1fZGlk
U2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSA9IHRydWU7Ci0KLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMt
PnVwZGF0ZURhdGFiYXNlKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fZGF0YWJhc2VTaXplKSB7Cisg
ICAgICAgIENoZWNrZWRVaW50NjQgZW50cnlTaXplID0gZXN0aW1hdGVFbnRyeVNpemUoa2V5LCBv
bGRWYWx1ZSk7CisgICAgICAgIGlmIChlbnRyeVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGVudHJ5
U2l6ZS51bnNhZmVHZXQoKSA+PSAqbV9kYXRhYmFzZVNpemUpCisgICAgICAgICAgICAqbV9kYXRh
YmFzZVNpemUgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqbV9kYXRhYmFzZVNpemUg
LT0gZW50cnlTaXplLnVuc2FmZUdldCgpOworICAgIH0KIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6dXBkYXRlRGF0YWJhc2UoKQorU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlOjpp
dGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewotICAgIGlmIChtX2lzQ2xvc2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUgPSBmYWxzZTsK
LQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNoYW5nZWRJdGVtczsKLSAgICBpZiAobV9j
aGFuZ2VkSXRlbXMuc2l6ZSgpIDw9IG1heGltdW1JdGVtc1RvVXBkYXRlKSB7Ci0gICAgICAgIC8v
IFRoZXJlIGFyZSBmZXcgZW5vdWdoIGNoYW5nZWQgaXRlbXMgdGhhdCB3ZSBjYW4ganVzdCBhbHdh
eXMgd3JpdGUgYWxsIG9mIHRoZW0uCi0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLnN3YXAoY2hhbmdl
ZEl0ZW1zKTsKLSAgICAgICAgdXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNoYW5nZWRJ
dGVtcyk7Ci0gICAgICAgIG1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9M
b2NhbFN0b3JhZ2UgPSBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbWF4aW11bUl0ZW1zVG9VcGRhdGU7ICsraSkgewotICAgICAgICAgICAgYXV0byBp
dCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkSXRlbXMuYWRk
KGl0LT5rZXksIGl0LT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92
ZShpdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoY2hhbmdlZEl0ZW1zLnNpemUoKSA8
PSBtYXhpbXVtSXRlbXNUb1VwZGF0ZSk7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgICAgIC8vIFJlc2NoZWR1bGUgdGhlIHVwZGF0ZSBmb3IgdGhlIHJlbWFpbmluZyBpdGVtcy4K
LSAgICAgICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgICAgICB1cGRhdGVEYXRhYmFz
ZVdpdGhDaGFuZ2VkSXRlbXMoY2hhbmdlZEl0ZW1zKTsKKyAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVk
U3RhdGVtZW50KG1fZ2V0SXRlbVN0YXRlbWVudCwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJs
ZSBXSEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFxdWVyeSkgeworICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBxdWVyeS0+YmluZFRleHQoMSwga2V5KTsK
KworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMCk7
CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0
aENoYW5nZWRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY2hhbmdlZEl0ZW1z
KQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRp
b24pCiB7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQotICAgICAgICBvcGVuRGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7
CisgICAgICAgIG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZTo6WWVzKTsKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3No
b3VsZENsZWFySXRlbXMpIHsKLSAgICAgICAgbV9zaG91bGRDbGVhckl0ZW1zID0gZmFsc2U7Ci0K
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICAgICAgaWYgKGNsZWFyU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJh
c2UiKTsKKyAgICBpZiAobV9xdW90YUluQnl0ZXMgIT0gV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9R
dW90YSkgeworICAgICAgICBpZiAoIW1fZGF0YWJhc2VTaXplKQorICAgICAgICAgICAgbV9kYXRh
YmFzZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZGF0YWJh
c2VQYXRoKTsKKyAgICAgICAgaWYgKCptX2RhdGFiYXNlU2l6ZSA+PSBtX3F1b3RhSW5CeXRlcykg
eworICAgICAgICAgICAgcXVvdGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlc3VsdCA9IGNsZWFyU3RhdGVtZW50LnN0ZXAo
KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRh
dGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICBDaGVja2VkVWludDY0IG5ld0RhdGFiYXNl
U2l6ZSA9ICptX2RhdGFiYXNlU2l6ZTsKKyAgICAgICAgbmV3RGF0YWJhc2VTaXplICs9IGVzdGlt
YXRlRW50cnlTaXplKGtleSwgdmFsdWUpOworICAgICAgICBpZiAobmV3RGF0YWJhc2VTaXplLmhh
c092ZXJmbG93ZWQoKSB8fCBuZXdEYXRhYmFzZVNpemUudW5zYWZlR2V0KCkgPiBtX3F1b3RhSW5C
eXRlcykgeworICAgICAgICAgICAgcXVvdGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGF0YWJhc2VTaXplID0gbmV3RGF0YWJhc2VT
aXplLnVuc2FmZUdldCgpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7
Ci0gICAgaWYgKGluc2VydFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
b2xkVmFsdWUgPSBpdGVtKGtleSk7CisKKyAgICBhdXRvIGluc2VydFN0YXRlbWVudCA9IHNjb3Bl
ZFN0YXRlbWVudChtX2luc2VydFN0YXRlbWVudCwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIl9zKTsKKyAgICBpZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUg
dG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZS
T00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGtleSk7CisgICAgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigyLCB2YWx1ZSk7CisKKyAgICBp
bnQgcmVzdWx0ID0gaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4g
dGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Cit9CisKK2Jvb2wgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gY2xlYXJTdGF0ZW1lbnQgPSBzY29wZWRTdGF0ZW1lbnQobV9jbGVhclN0
YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFjbGVhclN0YXRl
bWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRl
bWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGludCByZXN1bHQg
PSBjbGVhclN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBs
b2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gY2hhbmdlZEl0ZW1zLmJlZ2luKCksIGVu
ZCA9IGNoYW5nZWRJdGVtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEEg
bnVsbCB2YWx1ZSBtZWFucyB0aGF0IHRoZSBrZXkvdmFsdWUgcGFpciBzaG91bGQgYmUgZGVsZXRl
ZC4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQgPSBpdC0+dmFsdWUuaXNOdWxs
KCkgPyBkZWxldGVTdGF0ZW1lbnQgOiBpbnNlcnRTdGF0ZW1lbnQ7CisgICAgbV9kYXRhYmFzZVNp
emUgPSAwOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKKyAgICBy
ZXR1cm4gbV9kYXRhYmFzZS5sYXN0Q2hhbmdlcygpID4gMDsKK30KIAotICAgICAgICAvLyBJZiB3
ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFsdWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4K
LSAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAobV9pc0Nsb3Nl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNDbG9zZWQgPSB0cnVlOwogCi0gICAgICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBp
biB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgYm9vbCBpc0VtcHR5ID0gZGF0YWJhc2VJc0VtcHR5KCk7
CiAKLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgfQorICAgIG1fY2xlYXJTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1faW5zZXJ0U3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2dl
dEl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0SXRlbXNTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fZGVsZXRlSXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CiAKLSAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOworCisgICAgaWYgKGlzRW1wdHkpCisgICAgICAgIG1fdHJhY2tlci0+
ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4pOwogfQogCi1ib29sIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKQorYm9vbCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzYyLDYgKzM1MiwzMSBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNl
OjpkYXRhYmFzZUlzRW1wdHkoKQogICAgIHJldHVybiAhcXVlcnkuZ2V0Q29sdW1uSW50KDApOwog
fQogCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFz
ZTo6Tm8pOworCisgICAgLy8gUHJld2FybSB0aGUgZ2V0SXRlbXMgc3RhdGVtZW50IGZvciBwZXJm
b3JtYW5jZSBzaW5jZSB0aGUgcGFnZXMgYmxvY2sgc3luY2hyb25vdXNseSBvbiByZXRyaWV2aW5n
IHRoZSBpdGVtcy4KKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgc2NvcGVk
U3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOworfQor
CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQs
IGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQogewogICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCA3Zjc4ODQ5MmY5YzIxNDE2OTgwMDFm
NWEwZDA2NjY4ZTExZjM3ZWI2Li4xNDdhNmVjYjBiMzk4ODMxYWRjZTdiOTc3YmZjZTI5ZDM2NDNm
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxNiArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFN0b3JhZ2VNYXA7
CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZTsKIGNsYXNzIFN1ZGRlblRlcm1p
bmF0aW9uRGlzYWJsZXI7CisKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtNDQsMTcgKzQyLDE1IEBAIGNsYXNzIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjsKIAogY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TG9j
YWxTdG9yYWdlRGF0YWJhc2U+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
KTsKKyAgICBzdGF0aWMgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBjcmVhdGUoUmVmPFdvcmtR
dWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKICAgICB+TG9j
YWxTdG9yYWdlRGF0YWJhc2UoKTsKIAotICAgIC8vIFdpbGwgYmxvY2sgdW50aWwgdGhlIGltcG9y
dCBpcyBjb21wbGV0ZS4KLSAgICB2b2lkIGltcG9ydEl0ZW1zKFdlYkNvcmU6OlN0b3JhZ2VNYXAm
KTsKLQotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKLSAgICB2b2lk
IGNsZWFyKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlKCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsKKyAgICB2b2lkIG9wZW5JZkV4aXN0aW5nKCk7Cisg
ICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKTsK
KyAgICBib29sIGNsZWFyKCk7CisgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNv
bnN0OworICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOwogCiAgICAgLy8g
V2lsbCBibG9jayB1bnRpbCBhbGwgcGVuZGluZyBjaGFuZ2VzIGhhdmUgYmVlbiB3cml0dGVuIHRv
IGRpc2suCiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtNjIsMzkgKzU4LDM0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIAogcHJpdmF0ZToKLSAgICBMb2NhbFN0
b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKTsKKyAgICBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCB1bnNpZ25l
ZCBxdW90YUluQnl0ZXMpOwogCi0gICAgZW51bSBEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSB7Ci0g
ICAgICAgIENyZWF0ZUlmTm9uRXhpc3RlbnQsCi0gICAgICAgIFNraXBJZk5vbkV4aXN0ZW50Ci0g
ICAgfTsKLSAgICBib29sIHRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5
KTsKLSAgICB2b2lkIG9wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7CisgICAg
ZW51bSBjbGFzcyBTaG91bGRDcmVhdGVEYXRhYmFzZSA6IGJvb2wgeyBObywgWWVzIH07CisgICAg
Ym9vbCB0cnlUb09wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZSk7CisgICAgdm9pZCBv
cGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2UpOwogCiAgICAgYm9vbCBtaWdyYXRlSXRl
bVRhYmxlSWZOZWVkZWQoKTsKKyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0g
ICAgdm9pZCBpdGVtRGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotICAgIHZvaWQgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgIHZvaWQgdXBk
YXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Jik7Ci0KLSAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OwogCiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyPiBtX3RyYWNrZXI7CiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fc2Vj
dXJpdHlPcmlnaW47CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7Ci0gICAgV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAwIH07CiAg
ICAgYm9vbCBtX2ZhaWxlZFRvT3BlbkRhdGFiYXNlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGlk
SW1wb3J0SXRlbXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07Ci0K
LSAgICBib29sIG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3Nob3VsZENsZWFySXRlbXMgeyBmYWxzZSB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fY2hhbmdlZEl0ZW1zOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX2RhdGFiYXNlU2l6
ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdWRkZW5UZXJtaW5hdGlvbkRpc2Fi
bGVyPiBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxlV3JpdGluZ1RvTG9jYWxTdG9yYWdl
OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9jbGVhclN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0U3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVtU3RhdGVtZW50OworICAg
IG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJ
dGVtc1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fZGVsZXRlSXRlbVN0YXRlbWVudDsKIH07CiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVz
cGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlTmFtZXNwYWNlLmNwcAppbmRleCAyZDQzMWQ1YjliZmQ2NWE3NzMwMzE4MzA4M2Y2MzEz
OGVmYzM1NzQ5Li42MDE1M2JmN2Q2YjA3ZjU4ZTBlYTE1OTVhMTRmYzhjODEzNTNjMTQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNzMsMTAgKzczLDggQEAgdm9pZCBM
b2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHZvaWQgTG9jYWxT
dG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3JpZ2luKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChhdXRv
KiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpIHsKLSAgICAgICAg
c3RvcmFnZUFyZWEtPnN5bmNUb0RhdGFiYXNlKCk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VBcmVh
ID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNs
b3NlKCk7Ci0gICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCmluZGV4IDZjOTliODBmY2JlYjBkYjAw
MTg0MzliOTdiMDQ5ZGZmNzIxMDRiNGUuLmE5NDE2YjUxM2UxYjAxNjJhOTg3YWQ1OWFiZjIxYTU1
ODkwMmU4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDAsMTEgKzQxLDEyIEBAIFN0b3JhZ2VBcmVhOjpTdG9y
YWdlQXJlYShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSwgY29u
c3QgU2VjCiAgICAgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZShtYWtlV2Vha1B0cihsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UpKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikK
ICAgICAsIG1fcXVvdGFJbkJ5dGVzKHF1b3RhSW5CeXRlcykKLSAgICAsIG1fc3RvcmFnZU1hcChT
dG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpKQogICAgICwgbV9pZGVudGlmaWVyKElk
ZW50aWZpZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChpc0VwaGVtZXJhbCgpKQor
ICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMp
OwogfQogCiBTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKQEAgLTYxLDcgKzYzLDcgQEAgdm9p
ZCBTdG9yYWdlQXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uSUQpCiAgICAgQVNTRVJUKCFtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKGNvbm5lY3Rp
b25JRCkpOwogCiAgICAgaWYgKG1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpICYmICFpc0VwaGVt
ZXJhbCgpKQotICAgICAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Cisg
ICAgICAgIGVuc3VyZURhdGFiYXNlKCk7CiAKICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChjb25u
ZWN0aW9uSUQpOwogfQpAQCAtNzQsMTEgKzc2LDggQEAgdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3Zl
TGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQpCiAgICAgaWYg
KCFtX2V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3luY1Rv
RGF0YWJhc2UoKTsKLSAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFy
ZWEobV9zZWN1cml0eU9yaWdpbik7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQor
ICAgICAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFyZWEobV9zZWN1
cml0eU9yaWdpbik7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWE6Omhhc0xpc3RlbmVyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKSBjb25zdApAQCAtMTAxLDc0ICsxMDAsNzUg
QEAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25z
dAogdm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNv
dXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBs
SUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwog
CiAgICAgU3RyaW5nIG9sZFZhbHVlOwotCi0gICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9y
YWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7Ci0g
ICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3
U3RvcmFnZU1hcCk7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgYXV0byBuZXdT
dG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBx
dW90YUV4Y2VwdGlvbik7CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAg
bV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW5zdXJlRGF0YWJhc2UoKS5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4
Y2VwdGlvbik7CiAKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURh
dGFiYXNlLT5zZXRJdGVtKGtleSwgdmFsdWUpOwotCiAgICAgZGlzcGF0Y2hFdmVudHMoc291cmNl
Q29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxT
dHJpbmcpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBz
dG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5EYXRhYmFz
ZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBh
dXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1
ZSk7Ci0gICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1v
dmUobmV3U3RvcmFnZU1hcCk7Ci0KKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBh
dXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1
ZSk7CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFw
ID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5zdXJlRGF0
YWJhc2UoKS5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwogICAgIGlmIChvbGRWYWx1ZS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2Up
Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnJlbW92ZUl0ZW0oa2V5KTsKLQogICAg
IGRpc3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXks
IG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYTo6
Y2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJh
c2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6
OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7CiAKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xlYXIoKTsKKyAgICBpZiAoaXNF
cGhlbWVyYWwoKSkgeworICAgICAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3Jh
Z2VNYXAtPmNsZWFyKCkpCisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0
b3JhZ2VNYXApOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZW5zdXJlRGF0YWJhc2UoKS5j
bGVhcigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGRpc3BhdGNoRXZlbnRz
KHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCks
IFN0cmluZygpLCB1cmxTdHJpbmcpOwogfQogCi1jb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgU3RvcmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFN0
b3JhZ2VBcmVhOjppdGVtcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworICAgIGlmIChp
c0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5pdGVtcygpOwogCi0g
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKKyAgICByZXR1cm4gZW5zdXJlRGF0YWJh
c2UoKS5pdGVtcygpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcigpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6
Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKLQotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNl
KSB7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7Ci0gICAgICAgIG1f
bG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBudWxscHRyOworICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7
CisgICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkp
CisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CisgICAgICAg
ICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOworICAgICAgICAgICAgbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBmb3Ig
KGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJzLmJlZ2luKCksIGVuZCA9IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTc5LDIyICsxNzksMTcgQEAgdm9pZCBT
dG9yYWdlQXJlYTo6Y2xlYXIoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6b3BlbkRh
dGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0CitMb2NhbFN0b3JhZ2VEYXRhYmFz
ZSYgU3RvcmFnZUFyZWE6OmVuc3VyZURhdGFiYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQotICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc0VwaGVtZXJhbCgpKTsKIAogICAgIEFTU0VSVCht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyKCkpOwogICAgIC8vIFdlIG9wZW4gdGhlIGRhdGFiYXNlIGhlcmUgZXZlbiBp
ZiB3ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91ciBpdGVtcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0
YWJhc2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRvIHdyaXRlIHRvIGl0LgotICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksICptX2xvY2FsU3RvcmFn
ZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
KCksIG1fc2VjdXJpdHlPcmlnaW4pOwotCi0gICAgaWYgKG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0
YWJhc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmlt
cG9ydEl0ZW1zKCptX3N0b3JhZ2VNYXApOwotICAgIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJh
c2UgPSB0cnVlOworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgeworICAgICAgICBt
X2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX3F1
ZXVlLmNvcHlSZWYoKSwgKm1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigp
LT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoKSwgbV9zZWN1cml0eU9yaWdpbiwgbV9xdW90
YUluQnl0ZXMpOworICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5vcGVuSWZFeGlzdGlu
ZygpOworICAgIH0KKyAgICByZXR1cm4gKm1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7CiB9CiAKIHZv
aWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdApAQCAtMjExLDE0
ICsyMDYsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0bwogICAgIH0KIH0KIAotdm9pZCBTdG9y
YWdlQXJlYTo6c3luY1RvRGF0YWJhc2UoKQotewotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+dXBk
YXRlRGF0YWJhc2UoKTsKLX0KLQogdm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlm
ICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggYWIwOWZjOGU2NjA3OWQw
ZmY2M2E0NzIxOTA3ZjJhNmZkZGIxNzNiZi4uODgyMTY4ZTdiNDVkMWZjOWIzMTRlZDEzMjQwNjc4
YWUwZjJlYThmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKQEAgLTYzLDE0ICs2MywxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOwogCi0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0
ZW1zKCkgY29uc3Q7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBib29sIGlzRXBoZW1lcmFsKCkgY29uc3QgeyByZXR1
cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CiAKLSAgICB2b2lkIG9wZW5EYXRhYmFzZUFu
ZEltcG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc3luY1RvRGF0YWJhc2Uo
KTsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmco
KTsKQEAgLTc4LDEwICs3NSwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0
Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9y
YWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGNvbnN0OwogCisgICAgTG9jYWxTdG9yYWdlRGF0YWJhc2UmIGVuc3VyZURhdGFiYXNlKCkgY29u
c3Q7CisKICAgICAvLyBXaWxsIGJlIG51bGwgaWYgdGhlIHN0b3JhZ2UgYXJlYSBiZWxvbmdzIHRv
IGEgc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZSBvciB0aGUgc3RvcmFnZSBhcmVhIGlzIGluIGFu
IGVwaGVtZXJhbCBzZXNzaW9uLgogICAgIFdlYWtQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBt
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsKICAgICBtdXRhYmxlIFJlZlB0cjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9kaWRJ
bXBvcnRJdGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNlIH07CiAKICAgICBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEgbV9zZWN1cml0eU9yaWdpbjsKICAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRl
cyB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCmluZGV4IDg2Y2JjMDg1MDE3Y2E3YmE3
N2JmNmI1NTRkNmE2NWVkMDlmMTEwZmYuLjUyYzQ2ZTMzNDQ0MjE5NWU0ZDQ3YjY2NTY0ZjEyMTdj
OWZjZmI4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcApAQCAtMTU2LDEyICsxNTYsNyBA
QCB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0Ojp3YWl0VW50aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmlu
aXNoZWQoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBCaW5hcnlTZW1h
cGhvcmUgc2VtYXBob3JlOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCAmc2VtYXBob3Jl
XSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVh
cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2VBcmVhKTsKLSAgICAgICAg
ICAgIGlmIChzdG9yYWdlQXJlYSkKLSAgICAgICAgICAgICAgICBzdG9yYWdlQXJlYS0+c3luY1Rv
RGF0YWJhc2UoKTsKLSAgICAgICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3Jl
XSB7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUu
d2FpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VB
cmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAppbmRleCAwMDU3ZGNjZThlNGY0N2YwZWM3YWFjNzM1MjhiOTAyOGM5ODUwYWJkLi45NmY4
ZmQwNmU3MWEwODkyMzM1Y2NkMTMwMjU0NmNiNjQxYWRkODlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcApAQCAtMTc0LDggKzE3NCw4IEBA
IHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNlRnJhbWUpCiAgICAgaWYg
KCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25l
ZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9y
YWdlTWFwOjpjcmVhdGUocXVvdGEpOworICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0
b3JhZ2VNYXAtPmNsZWFyKCkpCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3Rv
cmFnZU1hcCk7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAgIG1fc3RvcmFn
ZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CkBAIC0yMTQsMTAgKzIxNCw4IEBAIHZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKCkKICAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAgCi0gICAgaWYg
KG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0
b3JhZ2VNYXAtPnF1b3RhKCk7Ci0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNy
ZWF0ZShxdW90YSk7Ci0gICAgfQorICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3Jh
Z2VNYXAtPmNsZWFyKCkpCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFn
ZU1hcCk7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKICAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427178</attachid>
            <date>2021-04-27 11:48:07 -0700</date>
            <delta_ts>2021-04-27 11:48:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225065-20210427114806.patch</filename>
            <type>text/plain</type>
            <size>41723</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmE0YjRhODhkNTJmZjIx
Y2IwMmU0ODI4OWJlN2NmYTRkZTJlMTBjZi4uMTZiYzVkMTNmNjU4ZDFjY2Y3YmM0N2Y5ZDA4M2Ix
MjhkMDU0ZmQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2VlcCBsb2NhbCBz
dG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6
CisgICAgICAgIEV4cG9ydCBhIGNvdXBsZSBtb3JlIHN5bWJvbHMuCisKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6Y2xlYXIp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5oOgorICAgICAgICBBZGQgYSBjbGVhcigp
IGZ1bmN0aW9uIHRvIFN0b3JhZ2VNYXAgc28gdGhhdCBTdG9yYWdlQXJlYSBkb2Vzbid0IHJlY29u
c3RydWN0IGEKKyAgICAgICAgbmV3IFN0b3JhZ2VNYXAgb2JqZWN0IHVubmVjZXNzYXJpbHkgd2hl
bjoKKyAgICAgICAgLSBUaGUgU3RvcmFnZU1hcCBpcyBub3Qgc2hhcmVkCisgICAgICAgIC0gVGhl
IFN0b3JhZ2VNYXAgaXMgZW1wdHkgKGFuZCBjbGVhcigpIGlzIGEgbm8tb3ApCisKIDIwMjEtMDQt
MjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc2sgTG9jYWxT
dG9yYWdlIGRhdGFiYXNlIHRvIGZyZWUgYXMgbXVjaCBtZW1vcnkgYXMgcG9zc2libGUgb24gbWVt
b3J5IHByZXNzdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkN2ZlMzhhOTc2NTJiMzdmYzM2ZTBkYzIxNWVkNDRi
YzIxYTEyOTkuLmE2ODQzZDI4ZjFjNGFiN2JjYThlYjU1ODkzNjMzYWJkNmVjNmMzNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMjEtMDQtMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBEb24ndCBrZWVwIGxvY2FsIHN0b3JhZ2UgZGF0YSBpbiBtZW1v
cnkgaW4gdGhlIE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjUwNjUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlz
dGVuc2VuLgorCisgICAgICAgIFdoZW4gYSBXZWJQYWdlIHdvdWxkIHN0YXJ0IHRvIHVzZSB0aGUg
bG9jYWwgc3RvcmFnZSBBUEksIHRoZSBXZWJQcm9jZXNzCisgICAgICAgIHdvdWxkIHNlbmQgYSBz
eW5jIElQQyB0byB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmV0cmlldmUgYWxsIHRoZSBsb2NhbAor
ICAgICAgICBzdG9yYWdlIGVudHJpZXMgZm9yIHRoZSBvcmlnaW4uIFRoZSBOZXR3b3JrUHJvY2Vz
cyB3b3VsZCByZWFkIHRob3NlCisgICAgICAgIGVudHJpZXMgZnJvbSBhIFNRTGl0ZSBkYXRhYmFz
ZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgIEJvdGggdGhl
IE5ldHdvcmtQcm9jZXNzIHdvdWxkIGtlZXAgdGhlIGVudHJpZXMgaW4gbWVtb3J5LCBpbiBhCisg
ICAgICAgIFN0b3JhZ2VNYXAgb2JqZWN0ICh3aGljaCBpcyBiYXNpY2FsbHkgYSBIYXNoTWFwKS4g
T24gc29tZSBzaXRlcywgdGhlCisgICAgICAgIHN0cmluZ3MgaW4gdGhlIGxvY2FsIHN0b3JhZ2Ug
bWF5IGJlIHZlcnkgbGFyZ2UuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlCisgICAgICAgIFdlYlByb2Nl
c3MgdG8ga2VlcCB0aGVtIGluIG1lbW9yeSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZXNwZWNp
YWxseQorICAgICAgICBjb25zaWRlcmluZyB0aGF0IHRoZSBXZWIgQVBJIGlzIHN5bmNocm9ub3Vz
LiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWFsCisgICAgICAgIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IG1lbW9yeSBpbiB0aGUgTmV0d29yayBQcm9jZXNzIHNpZGUsIGVzcGVjaWFsbHkKKyAgICAgICAg
Z2l2ZW4gdGhhdCB0aGUgV2ViUHJvY2VzcyBhbHJlYWR5IGhhcyBpdHMgb3duIGNvcHkuIE9uIHRo
ZSBuZXR3b3JrCisgICAgICAgIHByb2Nlc3Mgc2lkZSwgd2UgY2FuIGdldCByaWQgb2YgdGhlIFN0
b3JhZ2VNYXAgZW50aXJlbHkgaW4gdGhlIGxvY2FsCisgICAgICAgIHN0b3JhZ2UgY2FzZSBhbmQg
MTAwJSByZWx5IG9uIHRoZSBTUUxpdGUgZGF0YWJhc2UuIFRoaXMgaXMgd2hhdCB0aGlzCisgICAg
ICAgIHBhdGNoIGltcGxlbWVudHMuCisKKyAgICAgICAgQS9CIHRlc3Rpbmcgc2hvd3MgdGhpcyBp
cyBhIDItMyUgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyLiBUaGVyZSBkb2VzCisgICAgICAgIG5v
dCBhcHBlYXIgdG8gYmUgYSBtZWFuaW5nZnVsIHByb2dyZXNzaW9uIG9uIFBMVU0gc2FkbHkuIFRo
aXMgaXMgYWxzbworICAgICAgICBuZXV0cmFsIG9uIFBMVC4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojplc3RpbWF0ZUVudHJ5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURh
dGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
TG9jYWxTdG9yYWdlRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6Oml0ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
aXRlbSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3Qp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuaDoKKyAgICAgICAgLSBVcGRhdGUgTG9jYWxTdG9yYWdlRGF0YWJhc2UgQVBJIHRvIG1hdGNo
IG1vcmUgY2xvc2VseSB0aGUgQVBJIG9mCisgICAgICAgICAgU3RvcmFnZU1hcC4gVGhpcyB3YXkg
U3RvcmFnZUFyZWEgY2FuIHJlbHkgb24gdGhlIExvY2FsU3RvcmFnZURhdGFiYXNlCisgICAgICAg
ICAgZW50aXJlbHkgaW5zdGVhZCBvZiB0aGUgU3RvcmFnZU1hcCB3aXRoIG1pbmltYWwgY2hhbmdl
cy4KKyAgICAgICAgLSBBZGQgcXVvdGEgc3VwcG9ydCBzaW1pbGFybHkgdG8gd2hhdCBpcyBkb25l
IGluIFN0b3JhZ2VBcmVhIHNvIHRoYXQKKyAgICAgICAgICBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
c2V0SXRlbSgpIGZhaWxzIHdoZW4gdGhlIHF1b3RhIGlzIHJlYWNoZWQuCisgICAgICAgIC0gQ2Fj
aGUgdGhlIFNRTGl0ZVN0YXRlbWVudHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKToK
KyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBzeW5jVG9EYXRhYmFzZSgpIGJlZm9y
ZSBjbG9zaW5nIHNpbmNlCisgICAgICAgIExvY2FsU3RvcmFnZURhdGFiYXNlIG5vIGxvbmdlciBo
YXMgYSBxdWV1ZSBvbiBwZW5kaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmFkZExp
c3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjppdGVtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjplbnN1cmVEYXRhYmFzZSBjb25zdCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oOgorICAgICAgICBJ
ZiB0aGUgU3RvcmFnZUFyZWEgaXMgdXNlZCBmb3IgbG9jYWwgc3RvcmFnZSwgd2Ugbm93IGRvbid0
IGV2ZW4gaW5pdGlhbGl6ZQorICAgICAgICBhIFN0b3JhZ2VNYXAgYW5kIHJlbHkgZW50aXJlbHkg
b24gTG9jYWxTdG9yYWdlRGF0YWJhc2UuIElmIHRoZSBTdG9yYWdlQXJlYQorICAgICAgICBpcyB1
c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UsIHdlIGtlZXAgdXNpbmcgYSBTdG9yYWdlTWFwIHNpbmNl
IHRoZXJlIGlzIG5vCisgICAgICAgIGJhY2tpbmcgZGF0YWJhc2UuIFRoaXMgaXMgZmFpcmx5IHN0
cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIEkgdXBkYXRlZCB0aGUKKyAgICAgICAgTG9jYWxTdG9yYWdl
RGF0YWJhc2UgQVBJIHRvIG1hdGNoIGZhaXJseSBjbG9zZWx5IHRoZSBTdG9yYWdlTWFwIG9uZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlclNldDo6d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKToKKwogMjAyMS0wNC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFzayBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgdG8gZnJl
ZSBhcyBtdWNoIG1lbW9yeSBhcyBwb3NzaWJsZSBvbiBtZW1vcnkgcHJlc3N1cmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKaW5kZXggYzgyMWYxNjE0NzY4NzQ2MzYyMWQwMTZlMmQzNWRhNjlmZWQ0ZTg5Yy4u
MDZjZTlhOTIyOGQ1MzI0OWM3MzIyZGFlYmJhNjNiMWEwODlkOGE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFnZSBkYXRhIGluIG1l
bW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTA2NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgorICAgICAgICBVc2UgdGhl
IG5ldyBTdG9yYWdlTWFwOjpjbGVhcigpIHRvIGF2b2lkIGNvbnN0cnVjdGluZyBhIG5ldyBTdG9y
YWdlTWFwIHVubmVjZXNzYXJpbHkKKyAgICAgICAgd2hlbjoKKyAgICAgICAgLSBUaGUgU3RvcmFn
ZU1hcCBpcyBub3Qgc2hhcmVkCisgICAgICAgIC0gVGhlIFN0b3JhZ2VNYXAgaXMgZW1wdHkKKwog
MjAyMS0wNC0yNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVwZGF0ZSBNYWMtc3BlY2lmaWMgQ01ha2UgZmlsZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggMjcxODJiODM0MWY5ODdlOTJl
OTkzZWVhYzkxMDFmMDFkY2JiZTFlNi4uZDNkMDY5NmRiZjViMGYwZDY2MGI3MDg1MjBmYTYzYTk5
ODAyOGU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYjsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKIAotICAgIHZv
aWQgdXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlTGFzdENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRl
Q29tbWFuZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0
KGNvbnN0IFN0cmluZyYpOwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBpbnRlcnJ1cHQoKTsKIAogICAgIGludDY0X3QgbGFzdEluc2VydFJvd0lEKCk7
Ci0gICAgaW50IGxhc3RDaGFuZ2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxhc3RDaGFu
Z2VzKCk7CiAKICAgICB2b2lkIHNldEJ1c3lUaW1lb3V0KGludCBtcyk7CiAgICAgdm9pZCBzZXRC
dXN5SGFuZGxlcihpbnQoKikodm9pZCosIGludCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggZGRiZTIyMTBkYzVlZjg1MjIyNmNhNjlk
NDkxNmNiMmUxMWUyMDIzNy4uOWZmOWU4ZjFmMTY1NGY4MmRiM2Q2NmFjNTZjODA2MGVjZWQ2MWQx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5o
CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZURhdGFi
YXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSk7CiAjZW5kaWYKICAgICAKLSAgICBzdGF0aWMgbG9u
ZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxX
YWxsVGltZT4gZGF0YWJhc2VDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkYXRhYmFzZU1vZGlm
aWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VNYXAuY3BwCmluZGV4IGQ0N2M3MmIwNmVmZmFlNGMyNzY5Yjc2Mjc2YjMxNDFmYmQ2
ZmRiNzYuLmE4NDE0OWUwZjEzN2QxOTVlZjU5NGZhNmM5MmQwZTBhMWY4ZDM0NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApAQCAtMTc1LDYgKzE3NSwxOCBAQCBSZWZQdHI8
U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgU3Ry
aW5nJiBvbGRWYWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFN0b3JhZ2VN
YXA+IFN0b3JhZ2VNYXA6OmNsZWFyKCkKK3sKKyAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13cml0
ZSBzZW1hbnRpY3MgaGVyZS4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2Yg
U3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3JhZ2Ugb2JqZWN0cworICAgIC8vIHNvIGlmIG1vcmUg
dGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0
YXRpbmcgaXQuCisgICAgaWYgKHJlZkNvdW50KCkgPiAxICYmICFtX21hcC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YVNpemUpOworCisgICAgbV9t
YXAuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRMZW5ndGggPSAwOworICAgIHJldHVybiBudWxscHRy
OworfQorCiBib29sIFN0b3JhZ2VNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dAogewogICAgIHJldHVybiBtX21hcC5jb250YWlucyhrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuaAppbmRleCA0ZWE5ZTc4OTZjYWZhNzY5OTBlNTkwYzhiOTVkMzcxNDczMjBiMTlj
Li4yMmU5NzViOWNmZGY0ZWVmNzY1ZjkxMjc0ZTEzZGZlMDk2ZTI4MTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9u
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5n
UXVvdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0
cmluZyYgb2xkVmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBj
bGVhcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IGRiYmI4
MmUwNDczNTAwM2RlY2ZiYzU1NWE0NmE0YzI1ZDQ1ZmQ4OWUuLjlmYmZhMjZiZWU3YjkwNjczMmM2
NmFlZmRlYWM3MjI4NGM2ZTQyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTMsIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywzNSArMjcsNDUgQEAKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VEYXRhYmFzZS5oIgogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU3VkZGVuVGVybWluYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotc3RhdGljIGNvbnN0IGF1dG8gZGF0YWJhc2VVcGRhdGVJbnRlcnZhbCA9
IDFfczsKLQotc3RhdGljIGNvbnN0IGludCBtYXhpbXVtSXRlbXNUb1VwZGF0ZSA9IDEwMDsKLQog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPExvY2Fs
U3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVl
dWU+JiYgcXVldWUsIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwg
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyBjb25zdCBj
aGFyIGdldEl0ZW1zUXVlcnlTdHJpbmdbXSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1U
YWJsZSI7CisKK3N0YXRpYyBDaGVja2VkVWludDY0IGVzdGltYXRlRW50cnlTaXplKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIENoZWNrZWRVaW50NjQgZW50
cnlTaXplOworICAgIGVudHJ5U2l6ZSArPSBrZXkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOwor
ICAgIGVudHJ5U2l6ZSArPSB2YWx1ZS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgcmV0
dXJuIGVudHJ5U2l6ZTsKK30KKworUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6Y3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIFJlZjxMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXI+JiYgdHJhY2tlciwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBz
ZWN1cml0eU9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IExvY2FsU3RvcmFnZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRy
YWNrZXIpLCBzZWN1cml0eU9yaWdpbikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExvY2Fs
U3RvcmFnZURhdGFiYXNlKFdURk1vdmUocXVldWUpLCBXVEZNb3ZlKHRyYWNrZXIpLCBzZWN1cml0
eU9yaWdpbiwgcXVvdGFJbkJ5dGVzKSk7CiB9CiAKLUxvY2FsU3RvcmFnZURhdGFiYXNlOjpMb2Nh
bFN0b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBSZWY8TG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyPiYmIHRyYWNrZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2Vj
dXJpdHlPcmlnaW4pCitMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6TG9jYWxTdG9yYWdlRGF0YWJhc2Uo
UmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4m
JiB0cmFja2VyLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNp
Z25lZCBxdW90YUluQnl0ZXMpCiAgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogICAgICwg
bV90cmFja2VyKFdURk1vdmUodHJhY2tlcikpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3Vy
aXR5T3JpZ2luKQogICAgICwgbV9kYXRhYmFzZVBhdGgobV90cmFja2VyLT5kYXRhYmFzZVBhdGgo
bV9zZWN1cml0eU9yaWdpbikpCisgICAgLCBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC02NiwxMiArNzYsMTMgQEAg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiAgICAgQVNTRVJU
KG1faXNDbG9zZWQpOwogfQogCi12b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJh
c2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQordm9pZCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFiYXNlIHNob3VsZENy
ZWF0ZURhdGFiYXNlKQogeworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFT
U0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgQVNTRVJUKCFtX2ZhaWxlZFRvT3BlbkRh
dGFiYXNlKTsKIAotICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uob3BlbmluZ1N0cmF0ZWd5KSkg
eworICAgIGlmICghdHJ5VG9PcGVuRGF0YWJhc2Uoc2hvdWxkQ3JlYXRlRGF0YWJhc2UpKSB7CiAg
ICAgICAgIG1fZmFpbGVkVG9PcGVuRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtODAsMTAgKzkxLDEwIEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5E
YXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSBvcGVuaW5nU3RyYXRlZ3kpCiAgICAgICAg
IG1fdHJhY2tlci0+ZGlkT3BlbkRhdGFiYXNlV2l0aE9yaWdpbihtX3NlY3VyaXR5T3JpZ2luKTsK
IH0KIAotYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoRGF0YWJh
c2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmF0ZWd5KQorYm9vbCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hvdWxkQ3JlYXRl
RGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKCFG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBvcGVuaW5nU3RyYXRlZ3kg
PT0gU2tpcElmTm9uRXhpc3RlbnQpCisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1f
ZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRDcmVhdGVEYXRhYmFzZSA9PSBTaG91bGRDcmVhdGVEYXRh
YmFzZTo6Tm8pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fZGF0YWJhc2VQYXRo
LmlzRW1wdHkoKSkgewpAQCAtMTE3LDYgKzEyOCw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJh
CiAKIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgp
CiB7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKCFtX2RhdGFiYXNl
LnRhYmxlRXhpc3RzKCJJdGVtVGFibGUiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1
MywxOTcgKzE2NSwxNzUgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1U
YWJsZUlmTmVlZGVkKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKK0hhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtcygpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fZGlkSW1wb3J0SXRlbXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJ
ZiBpdCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3Vs
ZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVudGx5IGlnbm9y
aW5nIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKLQot
ICAgIC8vIFdlIHNldCB0aGlzIHRvIHRydWUgZXZlbiBpZiB3ZSBkb24ndCBlbmQgdXAgaW1wb3J0
aW5nIGFueSBpdGVtcyBkdWUgdG8gZmFpbHVyZSBiZWNhdXNlCi0gICAgLy8gdGhlcmUncyByZWFs
bHkgbm8gZ29vZCB3YXkgdG8gcmVjb3ZlciBvdGhlciB0aGFuIG5vdCBpbXBvcnRpbmcgYW55dGhp
bmcuCi0gICAgbV9kaWRJbXBvcnRJdGVtcyA9IHRydWU7Ci0KLSAgICBvcGVuRGF0YWJhc2UoU2tp
cElmTm9uRXhpc3RlbnQpOworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5
LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfc3RyKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1lbnQobV9nZXRJdGVt
c1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CisgICAgaWYgKCFxdWVyeSkgewogICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9y
IGxvY2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1zOwotCi0gICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IHF1
ZXJ5LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENv
bHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LT5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKDEpOwogICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgICAgICBpdGVtcy5hZGQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0
ZXAoKTsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciByZWFkaW5n
IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBzdG9yYWdlTWFwLmltcG9ydEl0ZW1zKFdURk1vdmUoaXRlbXMpKTsK
LX0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpdGVtRGlkQ2hhbmdlKGtleSwgdmFsdWUp
OworICAgIHJldHVybiBpdGVtczsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVt
b3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJl
bW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiB7Ci0gICAgaXRl
bURpZENoYW5nZShrZXksIFN0cmluZygpKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZTo6Y2xlYXIoKQotewotICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRD
bGVhckl0ZW1zID0gdHJ1ZTsKLQotICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLX0KKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2Uo
KQotewotICAgIGlmIChtX2lzQ2xvc2VkKQorICAgIG9sZFZhbHVlID0gaXRlbShrZXkpOworICAg
IGlmIChvbGRWYWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNDbG9zZWQg
PSB0cnVlOwogCi0gICAgaWYgKG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkgewotICAgICAg
ICB1cGRhdGVEYXRhYmFzZVdpdGhDaGFuZ2VkSXRlbXMobV9jaGFuZ2VkSXRlbXMpOwotICAgICAg
ICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOworICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gc2Nv
cGVkU3RhdGVtZW50KG1fZGVsZXRlSXRlbVN0YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJs
ZSBXSEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdy
aXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBkZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSk7CiAKLSAgICBib29sIGlzRW1w
dHkgPSBkYXRhYmFzZUlzRW1wdHkoKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQot
ICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0KLSAgICBpZiAoaXNFbXB0eSkKLSAgICAgICAg
bV90cmFja2VyLT5kZWxldGVEYXRhYmFzZVdpdGhPcmlnaW4obV9zZWN1cml0eU9yaWdpbik7Ci19
Ci0KLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1EaWRDaGFuZ2UoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9jaGFuZ2VkSXRlbXMuc2V0KGtl
eSwgdmFsdWUpOwotICAgIHNjaGVkdWxlRGF0YWJhc2VVcGRhdGUoKTsKLX0KLQotdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpCi17Ci0gICAgaWYgKG1f
ZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkKKyAgICBpbnQgcmVzdWx0ID0gZGVsZXRlU3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRh
YmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICgh
bV9kaXNhYmxlU3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFnZSkKLSAg
ICAgICAgbV9kaXNhYmxlU3VkZGVuVGVybWluYXRpb25XaGlsZVdyaXRpbmdUb0xvY2FsU3RvcmFn
ZSA9IG1ha2VVbmlxdWU8U3VkZGVuVGVybWluYXRpb25EaXNhYmxlcj4oKTsKLQotICAgIG1fZGlk
U2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSA9IHRydWU7Ci0KLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMt
PnVwZGF0ZURhdGFiYXNlKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fZGF0YWJhc2VTaXplKSB7Cisg
ICAgICAgIENoZWNrZWRVaW50NjQgZW50cnlTaXplID0gZXN0aW1hdGVFbnRyeVNpemUoa2V5LCBv
bGRWYWx1ZSk7CisgICAgICAgIGlmIChlbnRyeVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGVudHJ5
U2l6ZS51bnNhZmVHZXQoKSA+PSAqbV9kYXRhYmFzZVNpemUpCisgICAgICAgICAgICAqbV9kYXRh
YmFzZVNpemUgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqbV9kYXRhYmFzZVNpemUg
LT0gZW50cnlTaXplLnVuc2FmZUdldCgpOworICAgIH0KIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6dXBkYXRlRGF0YWJhc2UoKQorU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlOjpp
dGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewotICAgIGlmIChtX2lzQ2xvc2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUgPSBmYWxzZTsK
LQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNoYW5nZWRJdGVtczsKLSAgICBpZiAobV9j
aGFuZ2VkSXRlbXMuc2l6ZSgpIDw9IG1heGltdW1JdGVtc1RvVXBkYXRlKSB7Ci0gICAgICAgIC8v
IFRoZXJlIGFyZSBmZXcgZW5vdWdoIGNoYW5nZWQgaXRlbXMgdGhhdCB3ZSBjYW4ganVzdCBhbHdh
eXMgd3JpdGUgYWxsIG9mIHRoZW0uCi0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLnN3YXAoY2hhbmdl
ZEl0ZW1zKTsKLSAgICAgICAgdXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNoYW5nZWRJ
dGVtcyk7Ci0gICAgICAgIG1fZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uV2hpbGVXcml0aW5nVG9M
b2NhbFN0b3JhZ2UgPSBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbWF4aW11bUl0ZW1zVG9VcGRhdGU7ICsraSkgewotICAgICAgICAgICAgYXV0byBp
dCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkSXRlbXMuYWRk
KGl0LT5rZXksIGl0LT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92
ZShpdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoY2hhbmdlZEl0ZW1zLnNpemUoKSA8
PSBtYXhpbXVtSXRlbXNUb1VwZGF0ZSk7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgICAgIC8vIFJlc2NoZWR1bGUgdGhlIHVwZGF0ZSBmb3IgdGhlIHJlbWFpbmluZyBpdGVtcy4K
LSAgICAgICAgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgICAgICB1cGRhdGVEYXRhYmFz
ZVdpdGhDaGFuZ2VkSXRlbXMoY2hhbmdlZEl0ZW1zKTsKKyAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVk
U3RhdGVtZW50KG1fZ2V0SXRlbVN0YXRlbWVudCwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJs
ZSBXSEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFxdWVyeSkgeworICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBxdWVyeS0+YmluZFRleHQoMSwga2V5KTsK
KworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMCk7
CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBnZXQgaXRlbSBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0
aENoYW5nZWRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY2hhbmdlZEl0ZW1z
KQordm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRp
b24pCiB7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQotICAgICAgICBvcGVuRGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7
CisgICAgICAgIG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZTo6WWVzKTsKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3No
b3VsZENsZWFySXRlbXMpIHsKLSAgICAgICAgbV9zaG91bGRDbGVhckl0ZW1zID0gZmFsc2U7Ci0K
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICAgICAgaWYgKGNsZWFyU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJh
c2UiKTsKKyAgICBpZiAobV9xdW90YUluQnl0ZXMgIT0gV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9R
dW90YSkgeworICAgICAgICBpZiAoIW1fZGF0YWJhc2VTaXplKQorICAgICAgICAgICAgbV9kYXRh
YmFzZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZGF0YWJh
c2VQYXRoKTsKKyAgICAgICAgaWYgKCptX2RhdGFiYXNlU2l6ZSA+PSBtX3F1b3RhSW5CeXRlcykg
eworICAgICAgICAgICAgcXVvdGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlc3VsdCA9IGNsZWFyU3RhdGVtZW50LnN0ZXAo
KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRh
dGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICBDaGVja2VkVWludDY0IG5ld0RhdGFiYXNl
U2l6ZSA9ICptX2RhdGFiYXNlU2l6ZTsKKyAgICAgICAgbmV3RGF0YWJhc2VTaXplICs9IGVzdGlt
YXRlRW50cnlTaXplKGtleSwgdmFsdWUpOworICAgICAgICBpZiAobmV3RGF0YWJhc2VTaXplLmhh
c092ZXJmbG93ZWQoKSB8fCBuZXdEYXRhYmFzZVNpemUudW5zYWZlR2V0KCkgPiBtX3F1b3RhSW5C
eXRlcykgeworICAgICAgICAgICAgcXVvdGFFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGF0YWJhc2VTaXplID0gbmV3RGF0YWJhc2VT
aXplLnVuc2FmZUdldCgpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7
Ci0gICAgaWYgKGluc2VydFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
b2xkVmFsdWUgPSBpdGVtKGtleSk7CisKKyAgICBhdXRvIGluc2VydFN0YXRlbWVudCA9IHNjb3Bl
ZFN0YXRlbWVudChtX2luc2VydFN0YXRlbWVudCwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIl9zKTsKKyAgICBpZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUg
dG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZS
T00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGtleSk7CisgICAgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigyLCB2YWx1ZSk7CisKKyAgICBp
bnQgcmVzdWx0ID0gaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4g
dGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Cit9CisKK2Jvb2wgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gY2xlYXJTdGF0ZW1lbnQgPSBzY29wZWRTdGF0ZW1lbnQobV9jbGVhclN0
YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFjbGVhclN0YXRl
bWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRl
bWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGludCByZXN1bHQg
PSBjbGVhclN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBs
b2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gY2hhbmdlZEl0ZW1zLmJlZ2luKCksIGVu
ZCA9IGNoYW5nZWRJdGVtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEEg
bnVsbCB2YWx1ZSBtZWFucyB0aGF0IHRoZSBrZXkvdmFsdWUgcGFpciBzaG91bGQgYmUgZGVsZXRl
ZC4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQgPSBpdC0+dmFsdWUuaXNOdWxs
KCkgPyBkZWxldGVTdGF0ZW1lbnQgOiBpbnNlcnRTdGF0ZW1lbnQ7CisgICAgbV9kYXRhYmFzZVNp
emUgPSAwOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKKyAgICBy
ZXR1cm4gbV9kYXRhYmFzZS5sYXN0Q2hhbmdlcygpID4gMDsKK30KIAotICAgICAgICAvLyBJZiB3
ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFsdWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4K
LSAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAobV9pc0Nsb3Nl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNDbG9zZWQgPSB0cnVlOwogCi0gICAgICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBp
biB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgYm9vbCBpc0VtcHR5ID0gZGF0YWJhc2VJc0VtcHR5KCk7
CiAKLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgfQorICAgIG1fY2xlYXJTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1faW5zZXJ0U3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2dl
dEl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0SXRlbXNTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fZGVsZXRlSXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CiAKLSAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOworCisgICAgaWYgKGlzRW1wdHkpCisgICAgICAgIG1fdHJhY2tlci0+
ZGVsZXRlRGF0YWJhc2VXaXRoT3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4pOwogfQogCi1ib29sIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKQorYm9vbCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzYyLDYgKzM1MiwzMSBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNl
OjpkYXRhYmFzZUlzRW1wdHkoKQogICAgIHJldHVybiAhcXVlcnkuZ2V0Q29sdW1uSW50KDApOwog
fQogCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFz
ZTo6Tm8pOworCisgICAgLy8gUHJld2FybSB0aGUgZ2V0SXRlbXMgc3RhdGVtZW50IGZvciBwZXJm
b3JtYW5jZSBzaW5jZSB0aGUgcGFnZXMgYmxvY2sgc3luY2hyb25vdXNseSBvbiByZXRyaWV2aW5n
IHRoZSBpdGVtcy4KKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgc2NvcGVk
U3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOworfQor
CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQs
IGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQogewogICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCA3Zjc4ODQ5MmY5YzIxNDE2OTgwMDFm
NWEwZDA2NjY4ZTExZjM3ZWI2Li4xNDdhNmVjYjBiMzk4ODMxYWRjZTdiOTc3YmZjZTI5ZDM2NDNm
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxNiArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFN0b3JhZ2VNYXA7
CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZTsKIGNsYXNzIFN1ZGRlblRlcm1p
bmF0aW9uRGlzYWJsZXI7CisKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtNDQsMTcgKzQyLDE1IEBAIGNsYXNzIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjsKIAogY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TG9j
YWxTdG9yYWdlRGF0YWJhc2U+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
KTsKKyAgICBzdGF0aWMgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBjcmVhdGUoUmVmPFdvcmtR
dWV1ZT4mJiwgUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcj4mJiwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKICAgICB+TG9j
YWxTdG9yYWdlRGF0YWJhc2UoKTsKIAotICAgIC8vIFdpbGwgYmxvY2sgdW50aWwgdGhlIGltcG9y
dCBpcyBjb21wbGV0ZS4KLSAgICB2b2lkIGltcG9ydEl0ZW1zKFdlYkNvcmU6OlN0b3JhZ2VNYXAm
KTsKLQotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKLSAgICB2b2lk
IGNsZWFyKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlKCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsKKyAgICB2b2lkIG9wZW5JZkV4aXN0aW5nKCk7Cisg
ICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKTsK
KyAgICBib29sIGNsZWFyKCk7CisgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNv
bnN0OworICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOwogCiAgICAgLy8g
V2lsbCBibG9jayB1bnRpbCBhbGwgcGVuZGluZyBjaGFuZ2VzIGhhdmUgYmVlbiB3cml0dGVuIHRv
IGRpc2suCiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtNjIsMzkgKzU4LDM0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIAogcHJpdmF0ZToKLSAgICBMb2NhbFN0
b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKTsKKyAgICBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBSZWY8TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyPiYmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCB1bnNpZ25l
ZCBxdW90YUluQnl0ZXMpOwogCi0gICAgZW51bSBEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSB7Ci0g
ICAgICAgIENyZWF0ZUlmTm9uRXhpc3RlbnQsCi0gICAgICAgIFNraXBJZk5vbkV4aXN0ZW50Ci0g
ICAgfTsKLSAgICBib29sIHRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5
KTsKLSAgICB2b2lkIG9wZW5EYXRhYmFzZShEYXRhYmFzZU9wZW5pbmdTdHJhdGVneSk7CisgICAg
ZW51bSBjbGFzcyBTaG91bGRDcmVhdGVEYXRhYmFzZSA6IGJvb2wgeyBObywgWWVzIH07CisgICAg
Ym9vbCB0cnlUb09wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFzZSk7CisgICAgdm9pZCBv
cGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2UpOwogCiAgICAgYm9vbCBtaWdyYXRlSXRl
bVRhYmxlSWZOZWVkZWQoKTsKKyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0g
ICAgdm9pZCBpdGVtRGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotICAgIHZvaWQgc2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSgpOwotICAgIHZvaWQgdXBk
YXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Jik7Ci0KLSAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OwogCiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyPiBtX3RyYWNrZXI7CiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fc2Vj
dXJpdHlPcmlnaW47CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7Ci0gICAgV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAwIH07CiAg
ICAgYm9vbCBtX2ZhaWxlZFRvT3BlbkRhdGFiYXNlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGlk
SW1wb3J0SXRlbXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07Ci0K
LSAgICBib29sIG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3Nob3VsZENsZWFySXRlbXMgeyBmYWxzZSB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fY2hhbmdlZEl0ZW1zOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX2RhdGFiYXNlU2l6
ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdWRkZW5UZXJtaW5hdGlvbkRpc2Fi
bGVyPiBtX2Rpc2FibGVTdWRkZW5UZXJtaW5hdGlvbldoaWxlV3JpdGluZ1RvTG9jYWxTdG9yYWdl
OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9jbGVhclN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0U3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVtU3RhdGVtZW50OworICAg
IG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJ
dGVtc1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fZGVsZXRlSXRlbVN0YXRlbWVudDsKIH07CiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVz
cGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlTmFtZXNwYWNlLmNwcAppbmRleCAyZDQzMWQ1YjliZmQ2NWE3NzMwMzE4MzA4M2Y2MzEz
OGVmYzM1NzQ5Li42MDE1M2JmN2Q2YjA3ZjU4ZTBlYTE1OTVhMTRmYzhjODEzNTNjMTQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNzMsMTAgKzczLDggQEAgdm9pZCBM
b2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIHZvaWQgTG9jYWxT
dG9yYWdlTmFtZXNwYWNlOjpmbHVzaEFuZENsb3NlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3JpZ2luKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChhdXRv
KiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpIHsKLSAgICAgICAg
c3RvcmFnZUFyZWEtPnN5bmNUb0RhdGFiYXNlKCk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VBcmVh
ID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgc3RvcmFnZUFyZWEtPmNs
b3NlKCk7Ci0gICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCmluZGV4IDZjOTliODBmY2JlYjBkYjAw
MTg0MzliOTdiMDQ5ZGZmNzIxMDRiNGUuLmE5NDE2YjUxM2UxYjAxNjJhOTg3YWQ1OWFiZjIxYTU1
ODkwMmU4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDAsMTEgKzQxLDEyIEBAIFN0b3JhZ2VBcmVhOjpTdG9y
YWdlQXJlYShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSwgY29u
c3QgU2VjCiAgICAgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZShtYWtlV2Vha1B0cihsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UpKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikK
ICAgICAsIG1fcXVvdGFJbkJ5dGVzKHF1b3RhSW5CeXRlcykKLSAgICAsIG1fc3RvcmFnZU1hcChT
dG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpKQogICAgICwgbV9pZGVudGlmaWVyKElk
ZW50aWZpZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChpc0VwaGVtZXJhbCgpKQor
ICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMp
OwogfQogCiBTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKQEAgLTYxLDcgKzYzLDcgQEAgdm9p
ZCBTdG9yYWdlQXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uSUQpCiAgICAgQVNTRVJUKCFtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKGNvbm5lY3Rp
b25JRCkpOwogCiAgICAgaWYgKG1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpICYmICFpc0VwaGVt
ZXJhbCgpKQotICAgICAgICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Cisg
ICAgICAgIGVuc3VyZURhdGFiYXNlKCk7CiAKICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChjb25u
ZWN0aW9uSUQpOwogfQpAQCAtNzQsMTEgKzc2LDggQEAgdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3Zl
TGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQpCiAgICAgaWYg
KCFtX2V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3luY1Rv
RGF0YWJhc2UoKTsKLSAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFy
ZWEobV9zZWN1cml0eU9yaWdpbik7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQor
ICAgICAgICBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+cmVtb3ZlU3RvcmFnZUFyZWEobV9zZWN1
cml0eU9yaWdpbik7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWE6Omhhc0xpc3RlbmVyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEKSBjb25zdApAQCAtMTAxLDc0ICsxMDAsNzUg
QEAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25z
dAogdm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNv
dXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBs
SUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwog
CiAgICAgU3RyaW5nIG9sZFZhbHVlOwotCi0gICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9y
YWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7Ci0g
ICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3
U3RvcmFnZU1hcCk7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgYXV0byBuZXdT
dG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBx
dW90YUV4Y2VwdGlvbik7CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAg
bV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW5zdXJlRGF0YWJhc2UoKS5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4
Y2VwdGlvbik7CiAKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURh
dGFiYXNlLT5zZXRJdGVtKGtleSwgdmFsdWUpOwotCiAgICAgZGlzcGF0Y2hFdmVudHMoc291cmNl
Q29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxT
dHJpbmcpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBz
dG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG9wZW5EYXRhYmFz
ZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBh
dXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1
ZSk7Ci0gICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1v
dmUobmV3U3RvcmFnZU1hcCk7Ci0KKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBh
dXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1
ZSk7CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFw
ID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5zdXJlRGF0
YWJhc2UoKS5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwogICAgIGlmIChvbGRWYWx1ZS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2Up
Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnJlbW92ZUl0ZW0oa2V5KTsKLQogICAg
IGRpc3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXks
IG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYTo6
Y2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBvcGVuRGF0YWJh
c2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6
OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7CiAKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xlYXIoKTsKKyAgICBpZiAoaXNF
cGhlbWVyYWwoKSkgeworICAgICAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3Jh
Z2VNYXAtPmNsZWFyKCkpCisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0
b3JhZ2VNYXApOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZW5zdXJlRGF0YWJhc2UoKS5j
bGVhcigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGRpc3BhdGNoRXZlbnRz
KHNvdXJjZUNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCks
IFN0cmluZygpLCB1cmxTdHJpbmcpOwogfQogCi1jb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgU3RvcmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFN0
b3JhZ2VBcmVhOjppdGVtcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworICAgIGlmIChp
c0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5pdGVtcygpOwogCi0g
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKKyAgICByZXR1cm4gZW5zdXJlRGF0YWJh
c2UoKS5pdGVtcygpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcigpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6
Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKLQotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNl
KSB7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7Ci0gICAgICAgIG1f
bG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBudWxscHRyOworICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7
CisgICAgICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkp
CisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CisgICAgICAg
ICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOworICAgICAgICAgICAgbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBmb3Ig
KGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJzLmJlZ2luKCksIGVuZCA9IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTc5LDIyICsxNzksMTcgQEAgdm9pZCBT
dG9yYWdlQXJlYTo6Y2xlYXIoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6b3BlbkRh
dGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0CitMb2NhbFN0b3JhZ2VEYXRhYmFz
ZSYgU3RvcmFnZUFyZWE6OmVuc3VyZURhdGFiYXNlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKQotICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc0VwaGVtZXJhbCgpKTsKIAogICAgIEFTU0VSVCht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyKCkpOwogICAgIC8vIFdlIG9wZW4gdGhlIGRhdGFiYXNlIGhlcmUgZXZlbiBp
ZiB3ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91ciBpdGVtcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0
YWJhc2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRvIHdyaXRlIHRvIGl0LgotICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksICptX2xvY2FsU3RvcmFn
ZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
KCksIG1fc2VjdXJpdHlPcmlnaW4pOwotCi0gICAgaWYgKG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0
YWJhc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmlt
cG9ydEl0ZW1zKCptX3N0b3JhZ2VNYXApOwotICAgIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJh
c2UgPSB0cnVlOworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgeworICAgICAgICBt
X2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX3F1
ZXVlLmNvcHlSZWYoKSwgKm1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigp
LT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoKSwgbV9zZWN1cml0eU9yaWdpbiwgbV9xdW90
YUluQnl0ZXMpOworICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5vcGVuSWZFeGlzdGlu
ZygpOworICAgIH0KKyAgICByZXR1cm4gKm1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7CiB9CiAKIHZv
aWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdApAQCAtMjExLDE0
ICsyMDYsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0bwogICAgIH0KIH0KIAotdm9pZCBTdG9y
YWdlQXJlYTo6c3luY1RvRGF0YWJhc2UoKQotewotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRh
YmFzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+dXBk
YXRlRGF0YWJhc2UoKTsKLX0KLQogdm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlm
ICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggYWIwOWZjOGU2NjA3OWQw
ZmY2M2E0NzIxOTA3ZjJhNmZkZGIxNzNiZi4uODgyMTY4ZTdiNDVkMWZjOWIzMTRlZDEzMjQwNjc4
YWUwZjJlYThmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKQEAgLTYzLDE0ICs2MywxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOwogCi0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0
ZW1zKCkgY29uc3Q7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXMoKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBib29sIGlzRXBoZW1lcmFsKCkgY29uc3QgeyByZXR1
cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9CiAKLSAgICB2b2lkIG9wZW5EYXRhYmFzZUFu
ZEltcG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc3luY1RvRGF0YWJhc2Uo
KTsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmco
KTsKQEAgLTc4LDEwICs3NSwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0
Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCBTdG9y
YWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGNvbnN0OwogCisgICAgTG9jYWxTdG9yYWdlRGF0YWJhc2UmIGVuc3VyZURhdGFiYXNlKCkgY29u
c3Q7CisKICAgICAvLyBXaWxsIGJlIG51bGwgaWYgdGhlIHN0b3JhZ2UgYXJlYSBiZWxvbmdzIHRv
IGEgc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZSBvciB0aGUgc3RvcmFnZSBhcmVhIGlzIGluIGFu
IGVwaGVtZXJhbCBzZXNzaW9uLgogICAgIFdlYWtQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBt
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsKICAgICBtdXRhYmxlIFJlZlB0cjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9kaWRJ
bXBvcnRJdGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNlIH07CiAKICAgICBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEgbV9zZWN1cml0eU9yaWdpbjsKICAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRl
cyB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTZXQuY3BwCmluZGV4IDg2Y2JjMDg1MDE3Y2E3YmE3
N2JmNmI1NTRkNmE2NWVkMDlmMTEwZmYuLjdjNGNkOGE1YzMzZTJhZDY5ZmZmZGM1ZjdmZTUxYzFi
ZTZmMDM0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlclNldC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU2V0LmNwcApAQCAtMTU1LDE2ICsxNTUsNyBA
QCB2b2lkIFN0b3JhZ2VNYW5hZ2VyU2V0Ojp3YWl0VW50aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmlu
aXNoZWQoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBCaW5hcnlT
ZW1hcGhvcmUgc2VtYXBob3JlOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCAmc2VtYXBo
b3JlXSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VB
cmVhcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2VBcmVhKTsKLSAgICAg
ICAgICAgIGlmIChzdG9yYWdlQXJlYSkKLSAgICAgICAgICAgICAgICBzdG9yYWdlQXJlYS0+c3lu
Y1RvRGF0YWJhc2UoKTsKLSAgICAgICAgfQotICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7Ci0g
ICAgfSk7Ci0gICAgc2VtYXBob3JlLndhaXQoKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaFN5bmMo
W10geyB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlclNldDo6c3VzcGVuZChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmluZGV4IDAwNTdkY2NlOGU0ZjQ3ZjBl
YzdhYWM3MzUyOGI5MDI4Yzk4NTBhYmQuLjk2ZjhmZDA2ZTcxYTA4OTIzMzVjY2QxMzAyNTQ2Y2I2
NDFhZGQ4OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuY3BwCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFy
KEZyYW1lKiBzb3VyY2VGcmFtZSkKICAgICBpZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHF1b3RhID0gbV9zdG9yYWdlTWFwLT5xdW90
YSgpOwotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSk7CisgICAg
aWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+Y2xlYXIoKSkKKyAgICAgICAg
bV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKIAogICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsK
QEAgLTIxNCwxMCArMjE0LDggQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2lu
RGVsZXRpb24oKQogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUoKTsKICAgICAKLSAgICBpZiAobV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgewot
ICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICAgICAg
bV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKTsKLSAgICB9CisgICAgaWYg
KGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+Y2xlYXIoKSkKKyAgICAgICAgbV9z
dG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKIAogICAgIGlmIChtX3N0b3JhZ2VB
cmVhU3luYykgewogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>