<?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>157843</bug_id>
          
          <creation_ts>2016-05-18 09:25:32 -0700</creation_ts>
          <short_desc>Modern IDB: Add support for server side closing of open database connections</short_desc>
          <delta_ts>2016-05-18 13:41:32 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>157626</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1194290</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 09:25:32 -0700</bug_when>
    <thetext>Modern IDB: Add support for server side closing of open database connections

This is to support https://bugs.webkit.org/show_bug.cgi?id=157626</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194292</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 09:28:32 -0700</bug_when>
    <thetext>When the IDBServer decides to close a database connection itself, a lot of cleanup has to take place.

The server has to:
- Error out all requests it knows about
- Abort all transactions it knows about
- Tell the connection that it is being closed
- Wait for the connection to acknowledge that it was closed on the server

The client has to:
- Error out all requests it hasn&apos;t sent to the server
- Abort all transactions that haven&apos;t already been aborted by the server
- Send acknowledgement to the server that it has been closed.

Additionally, because of the asynchronous nature of requests being &quot;in flight&quot; between the client and server, a few design assumptions change, requiring changing some asserts and null checks to be graceful failures, etc etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194339</commentid>
    <comment_count>2</comment_count>
      <attachid>279266</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 11:49:11 -0700</bug_when>
    <thetext>Created attachment 279266
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194340</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 11:50:55 -0700</bug_when>
    <thetext>Attachment 279266 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:488:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:510:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.h:101:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194354</commentid>
    <comment_count>4</comment_count>
      <attachid>279266</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-18 12:06:28 -0700</bug_when>
    <thetext>Comment on attachment 279266
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:1087
&gt; +    Vector&lt;RefPtr&lt;IDBClient::TransactionOperation&gt;&gt; operations;
&gt; +    operations.reserveInitialCapacity(m_transactionOperationMap.size());
&gt; +    for (auto&amp; operation : m_transactionOperationMap.values())
&gt; +        operations.uncheckedAppend(operation);

copyValuesToVector

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:495
&gt; +    // If the modification time is in the future, don&apos;t both doing anything.
&gt; +    if (modificationTime &gt; std::chrono::system_clock::now()) {

Is this really a common case worth optimizing for?

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:519
&gt; +    for (auto* connection : m_databaseConnections.values()) {
&gt; +        const auto&amp; identifier = connection-&gt;database().identifier();
&gt; +        for (auto&amp; origin : origins) {

This could get slow if there are a lot of origins and connections.  Is there any way to use a HashSet or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194363</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 12:24:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 279266 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279266&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:1087
&gt; &gt; +    Vector&lt;RefPtr&lt;IDBClient::TransactionOperation&gt;&gt; operations;
&gt; &gt; +    operations.reserveInitialCapacity(m_transactionOperationMap.size());
&gt; &gt; +    for (auto&amp; operation : m_transactionOperationMap.values())
&gt; &gt; +        operations.uncheckedAppend(operation);
&gt; 
&gt; copyValuesToVector

Yup.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:495
&gt; &gt; +    // If the modification time is in the future, don&apos;t both doing anything.
&gt; &gt; +    if (modificationTime &gt; std::chrono::system_clock::now()) {
&gt; 
&gt; Is this really a common case worth optimizing for?

The commonality is indeterminate, since this is directly exposed as API.
The optimization definitely seems worthwhile because skipping it would involve performing a whole bunch of i/o just to do nothing.
 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:519
&gt; &gt; +    for (auto* connection : m_databaseConnections.values()) {
&gt; &gt; +        const auto&amp; identifier = connection-&gt;database().identifier();
&gt; &gt; +        for (auto&amp; origin : origins) {
&gt; 
&gt; This could get slow if there are a lot of origins and connections.  Is there
&gt; any way to use a HashSet or something?

The common case for known usage of this API is 1 origin.

For 1 origin, the Vector impl is faster and more space efficient than a HashSet, even before allowing for the construction of the HashSet itself.

I agree that if 1000&apos;s of origins came in the HashSet would be clearly superior, but in that case the entire operation will be very long running.

Especially since we have no reason to believe that happens, combined with the fact that this is already not blocking the main thread of either the Web or UI process, I think that is a premature optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194365</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 12:26:57 -0700</bug_when>
    <thetext>The patch is obviously causing havoc with the imported w3c tests (which I hadn&apos;t run locally, as I always assume storage/indexeddb is a better suite anyways)

Checking that locally...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194385</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 12:45:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The patch is obviously causing havoc with the imported w3c tests (which I
&gt; hadn&apos;t run locally, as I always assume storage/indexeddb is a better suite
&gt; anyways)
&gt; 
&gt; Checking that locally...

Never mind, nothing to see here.

Charge forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194398</commentid>
    <comment_count>8</comment_count>
      <attachid>279278</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 13:12:25 -0700</bug_when>
    <thetext>Created attachment 279278
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194399</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 13:15:03 -0700</bug_when>
    <thetext>Attachment 279278 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:488:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:510:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.h:101:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/IDBServer.h:134:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194401</commentid>
    <comment_count>10</comment_count>
      <attachid>279278</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 13:41:25 -0700</bug_when>
    <thetext>Comment on attachment 279278
Patch for landing

Clearing flags on attachment: 279278

Committed r201098: &lt;http://trac.webkit.org/changeset/201098&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194402</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 13:41:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279266</attachid>
            <date>2016-05-18 11:49:11 -0700</date>
            <delta_ts>2016-05-18 13:12:25 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84183</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5NmYyZjk5Yy4uOWU0NGFjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA1
LTE4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4g
SURCOiBBZGQgc3VwcG9ydCBmb3Igc2VydmVyIHNpZGUgY2xvc2luZyBvZiBvcGVuIGRhdGFiYXNl
IGNvbm5lY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3ODQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2hhbmRs
ZS11c2VyLWRlbGV0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vcmVzb3VyY2VzL2hhbmRsZS11c2VyLWRlbGV0ZS5qczogQWRkZWQuCisKIDIwMTYtMDUt
MTggIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmViYXNl
bGluZSBpbnNwZWN0b3IvZGVidWdnZXIvY29tbWFuZC1saW5lLWFwaS1leGNlcHRpb24uaHRtbCBh
ZnRlciByMjAxMDgwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9oYW5kbGUtdXNlci1kZWxldGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjE0N2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyB0aGF0IGV4cGVjdGVkIGVycm9y
cyBjb21lIGJhY2sgZnJvbSB1c2VyIGRlbGV0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK2luZGV4ZWREQiA9IHNlbGYuaW5kZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhlZERC
IHx8IHNlbGYubW96SW5kZXhlZERCIHx8IHNlbGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5kZXhl
ZERCOworCitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGJuYW1lKQoraW5kZXhlZERCLm9wZW4o
ZGJuYW1lKQorSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAwIE5ldyB2ZXJz
aW9uIC0gMQorU3RhcnRlZCB0d28gc3Bpbm5pbmcgcmVxdWVzdHMKK1JlcXVlc3RlZCBjbGVhckFs
bERhdGFiYXNlcworSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gYWJv
cnRlZDogW29iamVjdCBET01FcnJvcl0KK1tQQVNTXSBCb3RoIHJlcXVlc3RzIGhpdCBhIGZhaWx1
cmUgY29uZGl0aW9uIChSZWNlaXZlZCBvbmVycm9yIG9yIGZhaWxlZCB0byBzdGFydCBhIG5ldyBy
ZXF1ZXN0IGJlY2F1c2UgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkKQorW1BBU1NdIERhdGFi
YXNlIHJlY2VpdmVkIGNvcnJlY3QgZXJyb3IuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2hhbmRsZS11c2VyLWRlbGV0ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2hhbmRsZS11c2VyLWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDM5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLmh0bWwK
QEAgLTAsMCArMSwxMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHNjcmlwdCBzcmM9InJl
c291cmNlcy9oYW5kbGUtdXNlci1kZWxldGUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291
cmNlcy9oYW5kbGUtdXNlci1kZWxldGUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vcmVzb3VyY2VzL2hhbmRsZS11c2VyLWRlbGV0ZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lNjkwOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy9oYW5kbGUtdXNlci1kZWxldGUu
anMKQEAgLTAsMCArMSw5MiBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgZXhwZWN0ZWQgZXJy
b3JzIGNvbWUgYmFjayBmcm9tIHVzZXIgZGVsZXRlLiIpOworCitpbmRleGVkREJUZXN0KHByZXBh
cmVEYXRhYmFzZSk7CisKK3ZhciByZXF1ZXN0RXJyb3JDb3VudCA9IDA7Cit2YXIgZGF0YWJhc2VF
cnJvciA9IGZhbHNlOworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBpZiAocmVxdWVzdEVycm9y
Q291bnQgPT0gMikKKyAgICAgICAgbG9nKCJbUEFTU10gQm90aCByZXF1ZXN0cyBoaXQgYSBmYWls
dXJlIGNvbmRpdGlvbiAoUmVjZWl2ZWQgb25lcnJvciBvciBmYWlsZWQgdG8gc3RhcnQgYSBuZXcg
cmVxdWVzdCBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCkiKTsKKyAgICBlbHNl
CisgICAgICAgIGxvZygiW0ZBSUxdICIgKyByZXF1ZXN0RXJyb3JDb3VudCArICIgcmVxdWVzdChz
KSBoaXQgYSBmYWlsdXJlIGNvbmRpdGlvbi4iKTsKKworICAgIGlmIChkYXRhYmFzZUVycm9yKQor
ICAgICAgICBsb2coIltQQVNTXSBEYXRhYmFzZSByZWNlaXZlZCBjb3JyZWN0IGVycm9yLiIpOwor
ICAgIGVsc2UKKyAgICAgICAgbG9nKCJbRkFJTF0gRGF0YWJhc2UgZGlkIG5vdCByZWNlaXZlIGNv
cnJlY3QgZXJyb3IuIik7CisgICAgICAgIAorICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5j
dGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkZWJ1ZyhtZXNzYWdlKTsKK30KKworZnVuY3Rpb24g
bWF5YmVGaW5pc2goKQoreworICAgIGlmIChyZXF1ZXN0RXJyb3JDb3VudCA9PSAyICYmIGRhdGFi
YXNlRXJyb3IpCisgICAgICAgIGRvbmUoKTsKK30KKworZnVuY3Rpb24gcHJlcGFyZURhdGFiYXNl
KGV2ZW50KQoreworICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24g
LSAiICsgZXZlbnQub2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVy
c2lvbik7CisKKyAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0LnRyYW5z
YWN0aW9uOworICAgIHZhciBkYXRhYmFzZSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgdmFy
IG9iamVjdFN0b3JlID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRlc3RPYmplY3RTdG9y
ZSIpOworICAgIG9iamVjdFN0b3JlLnB1dCgiYmFyIiwgImZvbyIpOworICAgIAorICAgIGRhdGFi
YXNlLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYXRhYmFzZUVycm9yID0g
dHJ1ZTsKKyAgICAgICAgbWF5YmVGaW5pc2goKTsKKyAgICB9CisKKyAgICB2YXIgaGFzQ2xlYXJl
ZERhdGFiYXNlcyA9IGZhbHNlOworICAgIHZhciBzcGluR2V0ID0gZnVuY3Rpb24oKSB7IAorICAg
ICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHJlcSA9IG9iamVjdFN0b3JlLmdldCgiZm9vIik7
CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgKytyZXF1ZXN0RXJyb3JDb3VudDsK
KyAgICAgICAgICAgIG1heWJlRmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm47ICAgCisgICAg
ICAgIH0KKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
c3BpbkdldCgpOworICAgICAgICAgICAgaWYgKCFoYXNDbGVhcmVkRGF0YWJhc2VzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoInRlc3RSdW5uZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsiLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbG9nKCJSZXF1ZXN0ZWQgY2xlYXJBbGxEYXRhYmFzZXMiKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzQ2xlYXJlZERhdGFiYXNlcyA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlv
bihldmVudCkgeworICAgICAgICAgICAgKytyZXF1ZXN0RXJyb3JDb3VudDsKKyAgICAgICAgICAg
IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgbWF5YmVGaW5p
c2goKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBTdGFydCB1cCB0d28gZ2V0IGN5Y2xlcyBz
byB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgcmVxdWVzdCB0byBjYW5jZWwgd2hl
biB0aGUgZGF0YWJhc2UgaXMgZGVsZXRlZC4KKyAgICBzcGluR2V0KCk7CisgICAgc3BpbkdldCgp
OworICAgIAorICAgIGxvZygiU3RhcnRlZCB0d28gc3Bpbm5pbmcgcmVxdWVzdHMiKQorCisgICAg
dmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBs
b2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIGFib3J0ZWQ6ICIg
KyB2ZXJzaW9uVHJhbnNhY3Rpb24uZXJyb3IpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2Fj
dGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBjb21wbGV0ZSIpOworICAg
ICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uZXJyb3IgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICBsb2coIkluaXRpYWwgdXBncmFkZSB2ZXJzaW9uY2hh
bmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgZXJyb3I6ICIgKyBldmVudC50eXBlICsgIiAiICsg
dmVyc2lvblRyYW5zYWN0aW9uLmVycm9yLm5hbWUgKyAiLCAiICsgdmVyc2lvblRyYW5zYWN0aW9u
LmVycm9yLm1lc3NhZ2UpOworICAgICAgICBkb25lKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGE1OGU0MTUuLjRkYWY0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzYgQEAKKzIwMTYtMDUt
MTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IEFkZCBzdXBwb3J0IGZvciBzZXJ2ZXIgc2lkZSBjbG9zaW5nIG9mIG9wZW4gZGF0YWJhc2Ug
Y29ubmVjdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLmh0
bWwKKworICAgICAgICBJbiBvcmRlciB0byBzdXBwb3J0IGRlbGV0aW5nIEluZGV4ZWREQiBkYXRh
YmFzZXMsIHRoZSBJREIgc2VydmVyIG5lZWRzIHRoZSBhYmlsaXR5IHRvIAorICAgICAgICAiaW1t
ZWRpYXRlbHkiIGNsb3NlIGEgY3VycmVudGx5IG9wZW4gSURCIGNvbm5lY3Rpb24uCisgICAgICAg
IAorICAgICAgICBUbyBkbyBzbyBjbGVhbmx5LCB0aGUgc2VydmVyIGhhcyB0bzoKKyAgICAgICAg
LSBFcnJvciBvdXQgYWxsIHJlcXVlc3RzIGl0IGtub3dzIGFib3V0CisgICAgICAgIC0gQWJvcnQg
YWxsIHRyYW5zYWN0aW9ucyBpdCBrbm93cyBhYm91dAorICAgICAgICAtIFRlbGwgdGhlIGNvbm5l
Y3Rpb24gdGhhdCBpdCBpcyBiZWluZyBjbG9zZWQKKyAgICAgICAgLSBXYWl0IGZvciB0aGUgY29u
bmVjdGlvbiB0byBhY2tub3dsZWRnZSB0aGF0IGl0IHdhcyBjbG9zZWQgb24gdGhlIHNlcnZlcgor
ICAgICAgICAKKyAgICAgICAgQW5kIHRoZW4gdGhlIGNsaWVudCBoYXMgdG86CisgICAgICAgIC0g
RXJyb3Igb3V0IGFsbCByZXF1ZXN0cyBpdCBoYXNuJ3Qgc2VudCB0byB0aGUgc2VydmVyCisgICAg
ICAgIC0gQWJvcnQgYWxsIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIGFi
b3J0ZWQgYnkgdGhlIHNlcnZlcgorICAgICAgICAtIFNlbmQgYWNrbm93bGVkZ2VtZW50IHRvIHRo
ZSBzZXJ2ZXIgdGhhdCBpdCBoYXMgYmVlbiBjbG9zZWQuCisKKyAgICAgICAgRmluYWxseSwgYmVj
YXVzZSB0aGUgc3RhdHVzIG9mIGEgZ2l2ZW4gcmVxdWVzdCBtaWdodCBiZSAiaW4gZmxpZ2h0IiBz
b21ld2hlcmUgYmV0d2VlbiB0aGUgCisgICAgICAgIHNlcnZlciBhbmQgdGhlIGNsaWVudCwgc29t
ZSBkZXNpZ24gYXNzdW1wdGlvbnMgY2hhbmdlLiBUaGlzIHJlcXVpcmVzIHJld29ya2luZyBzb21l
IEFTU0VSVFMsCisgICAgICAgIG51bGwgY2hlY2tzLCBldGMuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6ZGlkQ2xvc2VGcm9tU2VydmVyKTogRG8gdGhlIGhlYXZ5IGxpZnRpbmcgZm9yIHRoZSBpbW1l
ZGlhdGUgY2xvc2Ugb24KKyAgICAgICAgICB0aGUgY2xpZW50IHNpZGUuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUlkZW50aWZpZXI6OmlzUmVsYXRlZFRvT3JpZ2luKToKKyAgICAgICAgCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKTogRXJyb3Ig
b3V0IGFsbCBvdXRzdGFuZGluZyBvcGVyYXRpb25zCisgICAgICAgICAgYW5kIGZpcmUgdGhlIGFi
b3J0IGVycm9yIG9uIGl0c2VsZi4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
Q29ubmVjdGlvblByb3h5Ojpjb21wbGV0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eTo6ZGlkQ2xvc2VGcm9tU2VydmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5Ojpjb25maXJtRGlkQ2xv
c2VGcm9tU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlv
blByb3h5Ojpmb3JnZXRBY3RpdmVPcGVyYXRpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5Lmg6CisgICAgICAgIAorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZENsb3NlRnJv
bVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1Nl
cnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oOgorICAgICAg
ICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xp
ZW50OjpkaWRDbG9zZUZyb21TZXJ2ZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaDoKKyAgICAgICAgCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmdlbmVyYXRlRGVsZXRlQ2FsbGJhY2tJRCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNl
c01vZGlmaWVkU2luY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFi
YXNlcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgor
ICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6flVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5EYXRhYmFzZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURh
dGFiYXNlT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpoYW5kbGVDdXJyZW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURlbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNv
bW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29ubmVjdGlvbkNsb3Nl
ZEZyb21TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlVHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXNDdXJyZW50bHlJblVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbnZva2VP
cGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXJGaXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjphY3RpdmF0
ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db21wbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJh
c2VUYXNrUmVwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkb25lV2l0aEhh
cmRDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmVycm9yT3BlbkRCUmVxdWVz
dEZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKTogRG8gdGhlIGhlYXZ5IGxpZnRp
bmcKKyAgICAgICAgICBmb3IgdGhlIGltbWVkaWF0ZSBjbG9zZSBvbiB0aGUgc2VydmVyIHNpZGUu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZXN1bHRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpzdG9yZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcik6IElmIHRoZSBkYXRh
YmFzZSBoYXMgYmVlbgorICAgICAgICAgIGhhcmQgc3RvcHBlZCwgaW1tZWRpYXRlbHkgZmlyZSBh
bmQgZXJyb3IgZm9yIHRoZSBjYWxsYmFjayBhbmQgcmV0dXJuIGEgMC1pZGVudGlmaWVyIHRvCisg
ICAgICAgICAgcmVmbGVjdCB0aGlzLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlk
Q2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJv
cjo6dG9ET01FcnJvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVy
cm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKToKKyAg
ICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNl
cnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZENsb3Nl
RnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNvbmZp
cm1EaWRDbG9zZUZyb21TZXJ2ZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6dGltZV9wb2ludD46OmNvcHkpOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmg6CisKIDIwMTYtMDUtMTggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFsbG93IFJlbmRlclN0eWxlcyBtYXJrZWQgdW5pcXVlIGluIG1hdGNo
ZWQgcHJvcGVydGllcyBjYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDI5YjQ3ODQuLjAyOGFmMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTI0NSw2ICsy
NDUsMjUgQEAgdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQogICAgIG1heWJlQ2xvc2VJblNlcnZl
cigpOwogfQogCit2b2lkIElEQkRhdGFiYXNlOjpkaWRDbG9zZUZyb21TZXJ2ZXIoY29uc3QgSURC
RXJyb3ImIGVycm9yKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQ2xv
c2VGcm9tU2VydmVyIC0gJSIgUFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIp
OworCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwor
ICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2Nsb3NlZEluU2VydmVyID0gdHJ1ZTsK
KworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX2FjdGl2ZVRyYW5zYWN0aW9ucy52YWx1
ZXMoKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKGVy
cm9yKTsKKworICAgIFJlZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQo
V1RGTW92ZShldmVudCkpOworCisgICAgbV9jb25uZWN0aW9uUHJveHktPmNvbmZpcm1EaWRDbG9z
ZUZyb21TZXJ2ZXIoKnRoaXMpOworfQorCiB2b2lkIElEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5T
ZXJ2ZXIoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUlu
U2VydmVyIC0gJSIgUFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggM2Nm
NmQ0Ny4uMzYyOTM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5oCkBAIC04Niw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEFib3J0
VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKIAogICAgIHZvaWQgZmlyZVZlcnNpb25DaGFu
Z2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcihj
b25zdCBJREJFcnJvciYpOwogCiAgICAgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkmIGNv
bm5lY3Rpb25Qcm94eSgpIHsgcmV0dXJuIG1fY29ubmVjdGlvblByb3h5LmdldCgpOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlSWRl
bnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmgKaW5kZXggMzFlNDFhYS4uZWExZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKQEAg
LTEwMiw2ICsxMDIsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0
OwogI2VuZGlmCiAKKyAgICBib29sIGlzUmVsYXRlZFRvT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcGVuaW5nT3Jp
Z2luID09IG90aGVyIHx8IG1fbWFpbkZyYW1lT3JpZ2luID09IG90aGVyOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7CiAgICAgU2VjdXJpdHlPcmlnaW5EYXRh
IG1fb3BlbmluZ09yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCAxMTJiNzY0Li4wNzA0MGRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBA
IC0xMDc1LDYgKzEwNzUsMzEgQEAgVGhyZWFkSWRlbnRpZmllciBJREJUcmFuc2FjdGlvbjo6b3Jp
Z2luVGhyZWFkSUQoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJ
RCgpOwogfQogCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZl
cihjb25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlciAtICVzIiwgZXJyb3IubWVzc2FnZSgp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6QWJvcnRpbmc7CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQkNsaWVudDo6VHJhbnNhY3Rp
b25PcGVyYXRpb24+PiBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnNpemUoKSk7CisgICAgZm9yIChhdXRv
JiBvcGVyYXRpb24gOiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnZhbHVlcygpKQorICAgICAg
ICBvcGVyYXRpb25zLnVuY2hlY2tlZEFwcGVuZChvcGVyYXRpb24pOworCisgICAgZm9yIChhdXRv
JiBvcGVyYXRpb24gOiBvcGVyYXRpb25zKQorICAgICAgICBvcGVyYXRpb24tPmNvbXBsZXRlZChJ
REJSZXN1bHREYXRhOjplcnJvcihvcGVyYXRpb24tPmlkZW50aWZpZXIoKSwgZXJyb3IpKTsKKwor
ICAgIGNvbm5lY3Rpb25Qcm94eSgpLmZvcmdldEFjdGl2ZU9wZXJhdGlvbnMob3BlcmF0aW9ucyk7
CisKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuY2xlYXIoKTsKKyAgICBtX2Fib3J0
UXVldWUuY2xlYXIoKTsKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNsZWFyKCk7CisK
KyAgICBtX2lkYkVycm9yID0gZXJyb3I7CisgICAgbV9kb21FcnJvciA9IGVycm9yLnRvRE9NRXJy
b3IoKTsKKyAgICBmaXJlT25BYm9ydCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGNhMjE1NDcuLjE5MWNj
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaApAQCAtMTQ1LDYgKzE0NSw4IEBAIHB1YmxpYzoKIAogICAgIFRocmVhZElkZW50aWZp
ZXIgb3JpZ2luVGhyZWFkSUQoKSBjb25zdDsKIAorICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZy
b21TZXJ2ZXIoY29uc3QgSURCRXJyb3ImKTsKKwogcHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlv
bihJREJEYXRhYmFzZSYsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVl
c3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAppbmRleCBjZThjOGIwLi5hMWI0N2Q4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
Q29ubmVjdGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcApAQCAtMjQ5LDcgKzI0OSw4IEBAIHZvaWQg
SURCQ29ubmVjdGlvblByb3h5Ojpjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQogICAgICAgICBvcGVyYXRpb24gPSBtX2FjdGl2ZU9wZXJhdGlvbnMudGFr
ZShyZXN1bHREYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpOwogICAgIH0KIAotICAgIEFTU0VSVChv
cGVyYXRpb24pOworICAgIGlmICghb3BlcmF0aW9uKQorICAgICAgICByZXR1cm47CiAKICAgICBw
ZXJmb3JtQ2FsbGJhY2tPbkNvcnJlY3RUaHJlYWQoKm9wZXJhdGlvbiwgJlRyYW5zYWN0aW9uT3Bl
cmF0aW9uOjpjb21wbGV0ZWQsIHJlc3VsdERhdGEpOwogfQpAQCAtMzg4LDYgKzM4OSwyOSBAQCB2
b2lkIElEQkNvbm5lY3Rpb25Qcm94eTo6ZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKElEQkRhdGFi
YXNlJiBkYXRhYmFzZSkKICAgICBjYWxsQ29ubmVjdGlvbk9uTWFpblRocmVhZCgmSURCQ29ubmVj
dGlvblRvU2VydmVyOjpkYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQsIGRhdGFiYXNlLmRhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURCQ29ubmVjdGlvblByb3h5Ojpk
aWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImIGVycm9yKQoreworICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gZGF0YWJh
c2U7CisgICAgeworICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VDb25uZWN0
aW9uTWFwTG9jayk7CisgICAgICAgIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXAu
Z2V0KGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIElmIHRo
ZSBJREJEYXRhYmFzZSBvYmplY3QgaXMgZ29uZSwgbWVzc2FnZSBiYWNrIHRvIHRoZSBzZXJ2ZXIg
c28gaXQgZG9lc24ndCBoYW5nCisgICAgLy8gd2FpdGluZyBmb3IgYSByZXBseSB0aGF0IHdpbGwg
bmV2ZXIgY29tZS4KKyAgICBpZiAoIWRhdGFiYXNlKSB7CisgICAgICAgIG1fY29ubmVjdGlvblRv
U2VydmVyLmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRp
Zmllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwZXJmb3JtQ2FsbGJhY2tPbkNv
cnJlY3RUaHJlYWQoKmRhdGFiYXNlLCAmSURCRGF0YWJhc2U6OmRpZENsb3NlRnJvbVNlcnZlciwg
ZXJyb3IpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Qcm94eTo6Y29uZmlybURpZENsb3NlRnJv
bVNlcnZlcihJREJEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgY2FsbENvbm5lY3Rpb25Pbk1h
aW5UaHJlYWQoJklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZl
ciwgZGF0YWJhc2UuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpKTsKK30KKwogdm9pZCBJ
REJDb25uZWN0aW9uUHJveHk6OnNjaGVkdWxlTWFpblRocmVhZFRhc2tzKCkKIHsKICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKG1fbWFpblRocmVhZFRhc2tMb2NrKTsKQEAgLTQzOCw2ICs0NjIsMTQg
QEAgdm9pZCBJREJDb25uZWN0aW9uUHJveHk6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24o
SURCRGF0YWJhc2UmIGRhdGFiYXNlKQogICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uTWFwLnJlbW92
ZShkYXRhYmFzZS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkpOwogfQogCit2b2lkIElE
QkNvbm5lY3Rpb25Qcm94eTo6Zm9yZ2V0QWN0aXZlT3BlcmF0aW9ucyhjb25zdCBWZWN0b3I8UmVm
UHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4mIG9wZXJhdGlvbnMpCit7CisgICAgTG9ja2VyPExv
Y2s+IGxvY2tlcihtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTG9jayk7CisKKyAgICBmb3IgKGF1dG8m
IG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMpCisgICAgICAgIG1fYWN0aXZlT3BlcmF0aW9ucy5yZW1v
dmUob3BlcmF0aW9uLT5pZGVudGlmaWVyKCkpOworfQorCiB9IC8vIG5hbWVzYXBjZSBJREJDbGll
bnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5oCmluZGV4
IDM4N2Q3ZDAuLmM4NGE4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmgKQEAgLTkzLDYgKzkz
LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24odWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgSURCVHJhbnNh
Y3Rpb24mKTsKICAgICB2b2lkIGRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZChJREJEYXRhYmFzZSYp
OwogCisgICAgdm9pZCBkaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGNvbmZpcm1EaWRDbG9z
ZUZyb21TZXJ2ZXIoSURCRGF0YWJhc2UmKTsKKwogICAgIHZvaWQgYWJvcnRPcGVuQW5kVXBncmFk
ZU5lZWRlZCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGNv
bXBsZXRlT3BlcmF0aW9uKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKQEAgLTEwOSw2ICsxMTIsOCBA
QCBwdWJsaWM6CiAKICAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gdGFrZUlEQk9wZW5EQlJl
cXVlc3QoSURCT3BlbkRCUmVxdWVzdCYpOwogCisgICAgdm9pZCBmb3JnZXRBY3RpdmVPcGVyYXRp
b25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+PiYpOworCiBwcml2
YXRlOgogICAgIHZvaWQgY29tcGxldGVPcGVuREJSZXF1ZXN0KGNvbnN0IElEQlJlc3VsdERhdGEm
KTsKICAgICBib29sIGhhc1JlY29yZE9mVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb24m
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKaW5kZXggZmJlN2Y0MS4u
NjYyYWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKQEAgLTMxNiw2ICsz
MTYsMjIgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmEKICAgICBtX3Byb3h5LT5kaWRTdGFydFRy
YW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQogCit2b2lkIElEQkNv
bm5lY3Rpb25Ub1NlcnZlcjo6ZGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29u
bmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWRDbG9zZUZyb21TZXJ2ZXIiKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9wcm94eS0+ZGlkQ2xvc2VGcm9tU2Vy
dmVyKGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGVycm9yKTsKK30KKwordm9pZCBJREJD
b25uZWN0aW9uVG9TZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0
YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29u
bmVjdGlvblRvU2VydmVyOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIik7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fZGVsZWdhdGUtPmNvbmZpcm1EaWRDbG9zZUZyb21T
ZXJ2ZXIoZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7Cit9CisKIHZvaWQgSURCQ29ubmVj
dGlvblRvU2VydmVyOjpub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50
NjRfdCBuZXdWZXJzaW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9T
ZXJ2ZXI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIu
aAppbmRleCBkMGNlMDY4Li5jNzkzM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5o
CkBAIC0xMDYsNiArMTA2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpcmVWZXJzaW9uQ2hh
bmdlRXZlbnQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcik7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgY29uZmlybURpZENsb3Nl
RnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgbm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lv
biwgdWludDY0X3QgbmV3VmVyc2lvbik7CiAgICAgdm9pZCBvcGVuREJSZXF1ZXN0Q2FuY2VsbGVk
KGNvbnN0IElEQlJlcXVlc3REYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1Nl
cnZlckRlbGVnYXRlLmgKaW5kZXggMmMwM2Q0ZS4uY2I0ZTVjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRl
bGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBhYm9ydE9wZW5BbmRVcGdyYWRlTmVlZGVkKHVpbnQ2NF90IGRhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBvcGVuREJSZXF1ZXN0Q2FuY2VsbGVkKGNvbnN0IElEQlJlcXVlc3REYXRhJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRh
dGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRB
bGxEYXRhYmFzZU5hbWVzKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2lu
LCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSUQpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcAppbmRleCA0YmY0
MWUwLi5lYzkzMTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcApAQCAtMTMz
LDYgKzEzMywxMSBAQCB2b2lkIElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkU3RhcnRUcmFuc2Fj
dGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYQogICAgIG1fZGVsZWdhdGUtPmRp
ZFN0YXJ0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKK3Zv
aWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRDbG9zZUZyb21TZXJ2ZXIoVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit7Cisg
ICAgbV9kZWxlZ2F0ZS0+ZGlkQ2xvc2VGcm9tU2VydmVyKGNvbm5lY3Rpb24sIGVycm9yKTsKK30K
Kwogdm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6Om5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2Vk
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90
IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiB7CiAgICAgbV9kZWxlZ2F0ZS0+bm90
aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQocmVxdWVzdElkZW50aWZpZXIsIG9sZFZlcnNpb24sIG5l
d1ZlcnNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCmluZGV4IDdlMjQ2NDcuLmYy
MWY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJDb25uZWN0aW9uVG9DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKQEAgLTY2LDYgKzY2LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50
aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwogICAgIHZvaWQgZGlkU3RhcnRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcihVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJFcnJvciYpOwogCiAgICAgdm9pZCBub3Rp
ZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVl
c3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAppbmRleCA0MmM1
NGFiLi42MmNhZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdh
dGUuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmlyZVZl
cnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRW
ZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVy
cm9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZUZyb21TZXJ2ZXIoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uJiwgY29uc3QgSURCRXJyb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1Zl
cnNpb24pID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRBbGxEYXRhYmFzZU5hbWVzKHVp
bnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhYmFzZU5hbWVzKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwCmluZGV4IDIxYmE3NTUuLjQxYzBkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0zMyw3
ICszMyw5IEBACiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNZW1vcnlJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJTUUxpdGVG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIApAQCAtMzg4LDYgKzM5MCwxNCBAQCB2b2lkIElEQlNlcnZlcjo6
b3BlbkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEp
CiAgICAgdW5pcXVlSURCRGF0YWJhc2UtPm9wZW5EQlJlcXVlc3RDYW5jZWxsZWQocmVxdWVzdERh
dGEucmVxdWVzdElkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURCU2VydmVyOjpjb25maXJtRGlk
Q2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZl
ciIpOworCisgICAgaWYgKGF1dG8gZGF0YWJhc2VDb25uZWN0aW9uID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb25zLmdldChkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgZGF0YWJh
c2VDb25uZWN0aW9uLT5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCk7Cit9CisKIHZvaWQgSURC
U2VydmVyOjpnZXRBbGxEYXRhYmFzZU5hbWVzKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdpbiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ewogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURC
U2VydmVyOjpwZXJmb3JtR2V0QWxsRGF0YWJhc2VOYW1lcywgc2VydmVyQ29ubmVjdGlvbklkZW50
aWZpZXIsIG1haW5GcmFtZU9yaWdpbiwgb3BlbmluZ09yaWdpbiwgY2FsbGJhY2tJRCkpOwpAQCAt
NDY4LDEwICs0NzgsNzUgQEAgdm9pZCBJREJTZXJ2ZXI6OmhhbmRsZVRhc2tSZXBsaWVzT25NYWlu
VGhyZWFkKCkKICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKIH0KIAotdm9pZCBJREJTZXJ2
ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjp0aW1lX3BvaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25I
YW5kbGVyKQorc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlRGVsZXRlQ2FsbGJhY2tJRCgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgdWludDY0X3QgY3VycmVudElE
ID0gMDsKKyAgICByZXR1cm4gKytjdXJyZW50SUQ7Cit9CisKK3ZvaWQgSURCU2VydmVyOjpjbG9z
ZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludCBtb2RpZmljYXRpb25UaW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBnZW5lcmF0ZURl
bGV0ZUNhbGxiYWNrSUQoKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVsZXRlRGF0YWJhc2VD
b21wbGV0aW9uSGFuZGxlcnMuYWRkKGNhbGxiYWNrSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworCisgICAgLy8gSWYgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIGluIHRoZSBmdXR1cmUsIGRv
bid0IGJvdGggZG9pbmcgYW55dGhpbmcuCisgICAgaWYgKG1vZGlmaWNhdGlvblRpbWUgPiBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpkaWRQZXJmb3Jt
Q2xvc2VBbmREZWxldGVEYXRhYmFzZXMsIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEhhc2hTZXQ8VW5pcXVlSURCRGF0YWJhc2UqPiBvcGVuRGF0YWJhc2VzOwor
ICAgIGZvciAoYXV0byogY29ubmVjdGlvbiA6IG1fZGF0YWJhc2VDb25uZWN0aW9ucy52YWx1ZXMo
KSkKKyAgICAgICAgb3BlbkRhdGFiYXNlcy5hZGQoJmNvbm5lY3Rpb24tPmRhdGFiYXNlKCkpOwor
CisgICAgZm9yIChhdXRvKiBkYXRhYmFzZSA6IG9wZW5EYXRhYmFzZXMpCisgICAgICAgIGRhdGFi
YXNlLT5pbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKKworICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpwZXJmb3JtQ2xvc2VB
bmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlLCBtb2RpZmljYXRpb25UaW1lLCBjYWxsYmFj
a0lEKSk7Cit9CisKK3ZvaWQgSURCU2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9y
aWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IGdlbmVyYXRlRGVsZXRlQ2FsbGJhY2tJRCgpOworICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVycy5hZGQoY2FsbGJhY2tJRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBIYXNoU2V0PFVuaXF1ZUlEQkRhdGFiYXNlKj4gb3Bl
bkRhdGFiYXNlczsKKyAgICBmb3IgKGF1dG8qIGNvbm5lY3Rpb24gOiBtX2RhdGFiYXNlQ29ubmVj
dGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmllciA9IGNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCkuaWRlbnRpZmllcigpOworICAgICAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IG9yaWdpbnMpIHsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzUmVsYXRlZFRvT3Jp
Z2luKG9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVj
dGlvbi0+ZGF0YWJhc2UoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8qIGRhdGFiYXNlIDogb3BlbkRhdGFi
YXNlcykKKyAgICAgICAgZGF0YWJhc2UtPmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpOwor
CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJT
ZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMsIG9yaWdpbnMs
IGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0
ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9w
b2ludCwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRl
bGV0aW5nIHRoZSBmaWxlcy4KKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRh
YmFzZXMsIGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFu
ZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4mLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGVs
ZXRpbmcgdGhlIGZpbGVzLgorICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFi
YXNlcywgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3Nl
QW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzYy
NikKLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2RlbGV0
ZURhdGFiYXNlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2FsbGJhY2tJRCk7CisgICAgQVNTRVJU
KGNhbGxiYWNrKTsKKyAgICBjYWxsYmFjaygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAppbmRleCA4Y2VlMzhmLi44MzIwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC04MSw2ICs4MSw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFib3J0T3BlbkFuZFVwZ3JhZGVOZWVk
ZWQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlm
aWVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29u
c3QgSURCUmVxdWVzdERhdGEmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmZpcm1EaWRD
bG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3Qgc2Vy
dmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZy
YW1lT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2
NF90IGNhbGxiYWNrSUQpOwogCkBAIC05Nyw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1l
X3BvaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25z
dCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29t
cGxldGlvbkhhbmRsZXIpOwogCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihJREJCYWNraW5nU3Rv
cmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwpAQCAtMTA3LDYgKzEwOSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGVyZm9ybUdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3Qgc2VydmVyQ29ubmVj
dGlvbklkZW50aWZpZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2lu
LCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSUQpOwogICAgIHZvaWQgZGlkR2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJD
b25uZWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRhdGFiYXNlTmFtZXMpOwogCisgICAgdm9pZCBwZXJmb3JtQ2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9p
bnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgcGVyZm9ybUNsb3NlQW5kRGVsZXRl
RGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIHVp
bnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOworCiAgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VU
aHJlYWRFbnRyeSh2b2lkKik7CiAgICAgdm9pZCBkYXRhYmFzZVJ1bkxvb3AoKTsKICAgICB2b2lk
IGhhbmRsZVRhc2tSZXBsaWVzT25NYWluVGhyZWFkKCk7CkBAIC0xMjUsNiArMTMxLDggQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24q
PiBtX2RhdGFiYXNlQ29ubmVjdGlvbnM7CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZp
ZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0aW9uczsKIAorICAg
IEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1fZGVsZXRlRGF0YWJh
c2VDb21wbGV0aW9uSGFuZGxlcnM7CisKICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBh
dGg7CiAgICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIG1fYmFja2luZ1N0
b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5k
ZXggZWRhOGRiOS4uZDRiZDY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC00Nyw3
ICs0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBJREJTZXJ2ZXIgewotICAgIAorCiBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURC
RGF0YWJhc2UoSURCU2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllcikKICAgICA6IG1fc2VydmVyKHNlcnZlcikKICAgICAsIG1faWRlbnRpZmllcihp
ZGVudGlmaWVyKQpAQCAtNjMsNyArNjMsOCBAQCBVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlE
QkRhdGFiYXNlKCkKICAgICBBU1NFUlQoIWhhc1VuZmluaXNoZWRUcmFuc2FjdGlvbnMoKSk7CiAg
ICAgQVNTRVJUKG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCht
X29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fY2xvc2VQ
ZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2NsaWVu
dENsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9zZXJ2ZXJDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSk7CiB9CiAK
IGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgVW5pcXVlSURCRGF0YWJhc2U6OmluZm8oKSBjb25zdApA
QCAtNzQsNiArNzUsOSBAQCBjb25zdCBJREJEYXRhYmFzZUluZm8mIFVuaXF1ZUlEQkRhdGFiYXNl
OjppbmZvKCkgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlQ29u
bmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGF0YSkKIHsKKyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5EYXRhYmFzZUNvbm5lY3Rpb24iKTsKKyAgICBBU1NFUlQoIW1faGFyZENsb3Nl
ZEZvclVzZXJEZWxldGUpOworCiAgICAgbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuYWRkKFNlcnZl
ck9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSkpOwogCiAgICAg
Ly8gQW4gb3BlbiBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgc28gd2UgY2FuJ3Qg
cG9zc2libHkgaGFuZGxlIHRoaXMgb25lIHlldC4KQEAgLTI3MSw3ICsyNzUsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZl
cnNpb24pCiAKICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAot
ICAgIGlmIChtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1f
cGVuZGluZ09wZW5EQlJlcXVlc3RzLmlzRW1wdHkoKSkgeworICAgIGlmIChtX2NsaWVudENsb3Nl
UGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ09wZW5EQlJl
cXVlc3RzLmlzRW1wdHkoKSkgewogICAgICAgICBtX3NlcnZlci5jbG9zZVVuaXF1ZUlEQkRhdGFi
YXNlKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI4Myw2ICsyODcsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6aGFuZGxlRGF0YWJhc2VPcGVyYXRpb25zIC0gVGhlcmUgYXJlICV1IHBl
bmRpbmciLCBtX3BlbmRpbmdPcGVuREJSZXF1ZXN0cy5zaXplKCkpOworICAgIEFTU0VSVCghbV9o
YXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAKICAgICBpZiAobV9kZWxldGVCYWNraW5nU3RvcmVJ
blByb2dyZXNzKQogICAgICAgICByZXR1cm47CkBAIC0zMTEsNyArMzE2LDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6aGFuZGxlRGF0YWJhc2VPcGVyYXRpb25zKCkKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmhhbmRsZUN1cnJlbnRPcGVyYXRpb24oKQogewogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZUN1cnJlbnRPcGVyYXRpb24iKTsKLQor
ICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgQVNTRVJUKG1fY3Vy
cmVudE9wZW5EQlJlcXVlc3QpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwpAQCAtMzM5LDMyICszNDQsNTIgQEAgc3RhdGljIHVpbnQ2NF90IGdl
bmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKICAgICByZXR1cm4gKytjdXJyZW50SUQ7
CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CisgICAgaWYgKG1faGFyZENs
b3NlZEZvclVzZXJEZWxldGUpIHsKKyAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxl
dGVFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgdWludDY0X3QgaWRl
bnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CiAgICAgQVNTRVJU
KCFtX2Vycm9yQ2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2Vycm9yQ2Fs
bGJhY2tzLmFkZChpZGVudGlmaWVyLCBjYWxsYmFjayk7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7
CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEtleURhdGFD
YWxsYmFjayBjYWxsYmFjaykKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogeworICAgIGlmIChtX2hh
cmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CisgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2Vy
RGVsZXRlRXJyb3IoKSwgeyB9KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgdWlu
dDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CiAg
ICAgQVNTRVJUKCFtX2tleURhdGFDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAg
IG1fa2V5RGF0YUNhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwgY2FsbGJhY2spOwogICAgIHJldHVy
biBpZGVudGlmaWVyOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxs
YmFjayhHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2sp
CiB7CisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKKyAgICAgICAgY2FsbGJh
Y2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpLCB7IH0pOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKICAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKTsKICAgICBBU1NFUlQoIW1fZ2V0UmVzdWx0Q2FsbGJhY2tzLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKICAgICBtX2dldFJlc3VsdENhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwg
Y2FsbGJhY2spOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi11aW50NjRfdCBVbmlxdWVJ
REJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhDb3VudENhbGxiYWNrIGNhbGxiYWNrKQordWludDY0
X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQogeworICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7Cisg
ICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSwgMCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKwogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBnZW5lcmF0ZVVu
aXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwogICAgIEFTU0VSVCghbV9jb3VudENhbGxiYWNrcy5j
b250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9jb3VudENhbGxiYWNrcy5hZGQoaWRlbnRpZmll
ciwgY2FsbGJhY2spOwpAQCAtMzc0LDYgKzM5OSw3IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrKENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpoYW5kbGVEZWxldGUoSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9u
LCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aGFuZGxlRGVsZXRlIik7CisgICAgQVNTRVJU
KCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKIAogICAgIG1fcGVuZGluZ09wZW5EQlJlcXVl
c3RzLmFkZChTZXJ2ZXJPcGVuREJSZXF1ZXN0OjpjcmVhdGUoY29ubmVjdGlvbiwgcmVxdWVzdERh
dGEpKTsKICAgICBoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMoKTsKQEAgLTUzOCw3ICs1NjQsMTAg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlIik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxs
YmFjayk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CisKICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtNTcwLDcgKzU5OSw5IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZSIpOwogCi0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJh
Y2spOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
Y2FsbGJhY2spOworICAgIGlmICghY2FsbGJhY2tJRCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byogaW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShv
YmplY3RTdG9yZU5hbWUpOwogICAgIGlmICghaW5mbykgewpAQCAtNjA5LDcgKzY0MCw5IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3Jl
Iik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7
CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxs
YmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOwogfQogCkBAIC02MzgsNyAr
NjcxLDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4Iik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxs
YmFjayk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAgLTY3Myw3ICs3MDgsOSBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsKKyAg
ICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIG9iamVjdFN0
b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7CkBAIC03MjEs
NyArNzU4LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkIik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxs
YmFjayk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtl
eURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKQEAgLTg1Nyw3ICs4OTYsOSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkIik7CiAK
LSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7CisgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxsYmFjayk7
CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAodWludDY0
X3QgaW5kZXhJZGVudGlmaWVyID0gcmVxdWVzdERhdGEuaW5kZXhJZGVudGlmaWVyKCkpCiAgICAg
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpLCBpbmRleElkZW50aWZpZXIsIHJlcXVlc3REYXRhLmluZGV4UmVjb3JkVHlwZSgpLCBy
YW5nZSkpOwpAQCAtOTA0LDcgKzk0NSw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENv
dW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIpOwogCi0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0
b3JlQ2FsbGJhY2soY2FsbGJhY2spOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoY2FsbGJhY2spOworICAgIGlmICghY2FsbGJhY2tJRCkKKyAgICAg
ICAgcmV0dXJuOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsKIH0K
IApAQCAtOTM1LDcgKzk3OCw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29y
ZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElECiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAg
IHJldHVybjsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lELCBy
ZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3Rv
cmVJZGVudGlmaWVyKCksIGtleVJhbmdlRGF0YSkpOwogfQogCkBAIC05NjIsNyArMTAwNyw5IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJDCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7
CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7Cisg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxsYmFj
ayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRl
bnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAgLTk5MCw3ICsxMDM3LDkgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IEkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsKKyAgICBp
ZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRl
cmF0ZUN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCksIHJlcXVlc3REYXRhLmN1cnNvcklkZW50aWZpZXIoKSwga2V5LCBjb3VudCkpOwogfQogCkBA
IC0xMDMyLDcgKzEwODEsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiAgICAgQVNTRVJU
KCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwog
Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOworICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoY2FsbGJhY2sp
OworICAgIGlmICghY2FsbGJhY2tJRCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFwcmVw
YXJlVG9GaW5pc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikpIHsKICAgICAgICAgaWYgKCFtX29w
ZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmNvbnRhaW5zKCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5l
Y3Rpb24oKSkpIHsKQEAgLTEwNzQsNyArMTEyNSw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
CiAKICAgICBBU1NFUlQoJnRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNl
KCkgPT0gdGhpcyk7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhj
YWxsYmFjayk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIXByZXBhcmVUb0ZpbmlzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSkgewogICAg
ICAgICBpZiAoIW1fb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMuY29udGFpbnMoJnRyYW5zYWN0aW9u
LmRhdGFiYXNlQ29ubmVjdGlvbigpKSkgewpAQCAtMTE0OSw3ICsxMjAyLDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uJgogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5nZURhdGFiYXNlQ29ubmVjdGlv
biA9PSAmY29ubmVjdGlvbikgewogICAgICAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pIHsKLSAgICAgICAgICAgIG1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQo
V1RGTW92ZShtX3ZlcnNpb25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24pKTsKKyAgICAgICAgICAg
IG1fY2xpZW50Q2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoV1RGTW92ZShtX3Zl
cnNpb25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24pKTsKIAogICAgICAgICAgICAgYXV0byB0cmFu
c2FjdGlvbklkZW50aWZpZXIgPSBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aW5mbygpLmlk
ZW50aWZpZXIoKTsKICAgICAgICAgICAgIGlmIChtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSkgewpAQCAtMTE3Nyw3ICsxMjMwLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uJgogICAgICAgICBub3RpZnlDdXJyZW50UmVxdWVzdENvbm5lY3Rp
b25DbG9zZWRPckZpcmVkVmVyc2lvbkNoYW5nZUV2ZW50KGNvbm5lY3Rpb24uaWRlbnRpZmllcigp
KTsKIAogICAgIGlmIChjb25uZWN0aW9uLmhhc05vbkZpbmlzaGVkVHJhbnNhY3Rpb25zKCkpIHsK
LSAgICAgICAgbV9jbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChXVEZNb3ZlKHBy
b3RlY3RlZENvbm5lY3Rpb24pKTsKKyAgICAgICAgbV9jbGllbnRDbG9zZVBlbmRpbmdEYXRhYmFz
ZUNvbm5lY3Rpb25zLmFkZChXVEZNb3ZlKHByb3RlY3RlZENvbm5lY3Rpb24pKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTE4NSw5ICsxMjM4LDM4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbiYKICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCk7CiB9CiAKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6Y29ubmVjdGlv
bkNsb3NlZEZyb21TZXJ2ZXIgLSAlcyAoJSIgUFJJdTY0ICIpIiwgY29ubmVjdGlvbi5vcGVuUmVx
dWVzdElkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY29ubmVjdGlv
bi5pZGVudGlmaWVyKCkpOworCisgICAgaWYgKG1fY2xpZW50Q2xvc2VQZW5kaW5nRGF0YWJhc2VD
b25uZWN0aW9ucy5jb250YWlucygmY29ubmVjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFtX29w
ZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CisgICAgICAgIEFT
U0VSVCghbV9zZXJ2ZXJDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmNvbnRhaW5zKCZj
b25uZWN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uPiBwcm90ZWN0ZWRDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworICAg
IG1fb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMucmVtb3ZlKCZjb25uZWN0aW9uKTsKKworICAgIGNv
bm5lY3Rpb24uY29ubmVjdGlvblRvQ2xpZW50KCkuZGlkQ2xvc2VGcm9tU2VydmVyKGNvbm5lY3Rp
b24sIElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSk7CisKKyAgICBtX3NlcnZlckNsb3NlUGVu
ZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuYWRkKFdURk1vdmUocHJvdGVjdGVkQ29ubmVjdGlvbikp
OworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6
Y29uZmlybURpZENsb3NlRnJvbVNlcnZlciAtICVzICglIiBQUkl1NjQgIikiLCBjb25uZWN0aW9u
Lm9wZW5SZXF1ZXN0SWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBj
b25uZWN0aW9uLmlkZW50aWZpZXIoKSk7CisKKyAgICBBU1NFUlQobV9zZXJ2ZXJDbG9zZVBlbmRp
bmdEYXRhYmFzZUNvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CisgICAgbV9zZXJ2
ZXJDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLnJlbW92ZSgmY29ubmVjdGlvbik7Cit9
CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmVucXVldWVUcmFuc2FjdGlvbihSZWY8VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbj4mJiB0cmFuc2FjdGlvbikKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OmVucXVldWVUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNh
Y3Rpb24tPmluZm8oKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJU
KCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
aW5mbygpLm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5n
ZSk7CiAKQEAgLTExOTgsNyArMTI4MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmVucXVl
dWVUcmFuc2FjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4mJiB0CiAKIGJv
b2wgVW5pcXVlSURCRGF0YWJhc2U6OmlzQ3VycmVudGx5SW5Vc2UoKSBjb25zdAogewotICAgIHJl
dHVybiAhbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fY2xvc2VQZW5k
aW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ09wZW5EQlJlcXVl
c3RzLmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0IHx8IG1fdmVyc2lvbkNoYW5n
ZURhdGFiYXNlQ29ubmVjdGlvbiB8fCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBtX2lz
T3BlbmluZ0JhY2tpbmdTdG9yZSB8fCBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3M7Cisg
ICAgcmV0dXJuICFtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9jbGll
bnRDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5n
T3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpIHx8IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgfHwgbV92
ZXJzaW9uQ2hhbmdlRGF0YWJhc2VDb25uZWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uIHx8IG1faXNPcGVuaW5nQmFja2luZ1N0b3JlIHx8IG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Q
cm9ncmVzczsKIH0KIAogYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6aGFzVW5maW5pc2hlZFRyYW5z
YWN0aW9ucygpIGNvbnN0CkBAIC0xMjA5LDYgKzEyOTEsOCBAQCBib29sIFVuaXF1ZUlEQkRhdGFi
YXNlOjpoYXNVbmZpbmlzaGVkVHJhbnNhY3Rpb25zKCkgY29uc3QKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Omludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKQogewogICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6aW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rp
b25UaW1lcigpIik7CisgICAgQVNTRVJUKCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKKwog
ICAgIGlmICghbV9vcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAg
ICAgIG1fb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CkBA
IC0xMjE2LDYgKzEzMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbnZva2VPcGVyYXRp
b25BbmRUcmFuc2FjdGlvblRpbWVyKCkKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZXJhdGlv
bkFuZFRyYW5zYWN0aW9uVGltZXJGaXJlZCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVkIik7
CisgICAgQVNTRVJUKCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKIAogICAgIFJlZlB0cjxV
bmlxdWVJREJEYXRhYmFzZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKIApAQCAtMTI2OCw3ICsxMzUz
LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2lu
Z1N0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnMKICAgICAgICAgcmVmVHJhbnNhY3Rpb24tPmRp
ZEFjdGl2YXRlSW5CYWNraW5nU3RvcmUoZXJyb3IpOwogICAgIH07CiAKLSAgICB1aW50NjRfdCBj
YWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7CisgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxs
YmFja0lEKQorICAgICAgICByZXR1cm47CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFjdGl2YXRlVHJh
bnNhY3Rpb25JbkJhY2tpbmdTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpKSk7
CiB9CiAKQEAgLTEzNzMsMjYgKzE0NjAsMjggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dHJh
bnNhY3Rpb25Db21wbGV0ZWQoUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24KICAg
ICB9CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb24oKS5oYXNOb25G
aW5pc2hlZFRyYW5zYWN0aW9ucygpKQotICAgICAgICBtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29u
bmVjdGlvbnMucmVtb3ZlKCZ0cmFuc2FjdGlvbi0+ZGF0YWJhc2VDb25uZWN0aW9uKCkpOworICAg
ICAgICBtX2NsaWVudENsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMucmVtb3ZlKCZ0cmFu
c2FjdGlvbi0+ZGF0YWJhc2VDb25uZWN0aW9uKCkpOwogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uID09IHRyYW5zYWN0aW9uKQogICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbiA9IG51bGxwdHI7CiAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBkYXRh
YmFzZSBoYWQgaXRzIGJhY2tpbmcgc3RvcmUgZGVsZXRlZCBidXQgdGhlcmUgd2VyZSBhIGZldyBv
dXRzdGFuZGluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KICAgICAvLyBJZiB0aGlzIHRyYW5z
YWN0aW9uIGNvbXBsZXRpbmcgd2FzIHRoZSBsYXN0IG9mIHRob3NlIG9wZXJhdGlvbnMsIHdlIGNh
biBmaW5hbGx5IGRlbGV0ZSB0aGlzIFVuaXF1ZUlEQkRhdGFiYXNlLgotICAgIGlmIChtX2Nsb3Nl
UGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ09wZW5EQlJl
cXVlc3RzLmlzRW1wdHkoKSAmJiAhbV9kYXRhYmFzZUluZm8pIHsKKyAgICBpZiAobV9jbGllbnRD
bG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdPcGVu
REJSZXF1ZXN0cy5pc0VtcHR5KCkgJiYgIW1fZGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIG1fc2Vy
dmVyLmNsb3NlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gUHJldmlvdXNseSBibG9ja2VkIG9wZXJhdGlvbnMgbWlnaHQgYmUgcnVubmFi
bGUuCi0gICAgaW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpOworICAgIGlmICgh
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKKyAgICAgICAgaW52b2tlT3BlcmF0aW9uQW5kVHJh
bnNhY3Rpb25UaW1lcigpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJh
c2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFRhc2s+JiYgdGFzaykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1fZGF0YWJhc2VRdWV1ZS5hcHBlbmQoV1RGTW92
ZSh0YXNrKSk7CisgICAgKyttX3F1ZXVlZFRhc2tDb3VudDsKIAogICAgIG1fc2VydmVyLnBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrKSk7CiB9CkBAIC0xNDAxLDYgKzE0OTAsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoc3RkOjp1bmlxdWVf
cHRyPENyb3NzVGhyZWFkVGFzaz4mJgogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKKyAgICArK21f
cXVldWVkVGFza0NvdW50OwogCiAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpleGVjdXRlTmV4
dERhdGFiYXNlVGFza1JlcGx5KSk7CiB9CkBAIC0xNDA4LDQ5ICsxNDk4LDE0NyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoc3RkOjp1bmlxdWVfcHRyPENy
b3NzVGhyZWFkVGFzaz4mJgogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRh
YmFzZVRhc2soKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X3F1ZXVlZFRhc2tDb3VudCk7CiAKICAgICBhdXRvIHRhc2sgPSBtX2RhdGFiYXNlUXVldWUudHJ5
R2V0TWVzc2FnZSgpOwogICAgIEFTU0VSVCh0YXNrKTsKIAogICAgIHRhc2stPnBlcmZvcm1UYXNr
KCk7CisgICAgLS1tX3F1ZXVlZFRhc2tDb3VudDsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQobV9xdWV1ZWRUYXNrQ291bnQpOwogCiAgICAgYXV0byB0YXNr
ID0gbV9kYXRhYmFzZVJlcGx5UXVldWUudHJ5R2V0TWVzc2FnZSgpOwogICAgIEFTU0VSVCh0YXNr
KTsKIAogICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgLS1tX3F1ZXVlZFRhc2tDb3VudDsK
KworICAgIC8vIElmIHRoaXMgZGF0YWJhc2Ugd2FzIGZvcmNlIGNsb3NlZCAoZS5nLiBmb3IgYSB1
c2VyIGRlbGV0ZSkgYW5kIHRoZXJlIGFyZSBubyBtb3JlCisgICAgLy8gcXVldWVkIHRhc2tzIGxl
ZnQsIGRlbGV0ZSB0aGlzLgorICAgIGlmIChtX2hhcmRDbG9zZVByb3RlY3RvciAmJiBkb25lV2l0
aEhhcmRDbG9zZSgpKQorICAgICAgICBtX2hhcmRDbG9zZVByb3RlY3RvciA9IG51bGxwdHI7Cit9
CisKK2Jvb2wgVW5pcXVlSURCRGF0YWJhc2U6OmRvbmVXaXRoSGFyZENsb3NlKCkKK3sKKyAgICBy
ZXR1cm4gKCFtX3F1ZXVlZFRhc2tDb3VudCAmJiBtX3NlcnZlckNsb3NlUGVuZGluZ0RhdGFiYXNl
Q29ubmVjdGlvbnMuaXNFbXB0eSgpKTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JPcGVuREJSZXF1
ZXN0Rm9yVXNlckRlbGV0ZShTZXJ2ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGF1
dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVzdC5yZXF1ZXN0RGF0YSgpLnJl
cXVlc3RJZGVudGlmaWVyKCksIElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSk7CisgICAgaWYg
KHJlcXVlc3QuaXNPcGVuUmVxdWVzdCgpKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24oKS5k
aWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbigpLmRpZERlbGV0ZURhdGFiYXNlKHJlc3VsdCk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUgLSBDYW5j
ZWxsaW5nICglaSwgJWksICVpLCAlaSkgY2FsbGJhY2tzIiwgbV9lcnJvckNhbGxiYWNrcy5zaXpl
KCksIG1fa2V5RGF0YUNhbGxiYWNrcy5zaXplKCksIG1fZ2V0UmVzdWx0Q2FsbGJhY2tzLnNpemUo
KSwgbV9jb3VudENhbGxiYWNrcy5zaXplKCkpOworCisgICAgLy8gRXJyb3Igb3V0IGFsbCB0cmFu
c2FjdGlvbnMKKyAgICBWZWN0b3I8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBpblByb2dyZXNzSWRl
bnRpZmllcnM7CisgICAgY29weUtleXNUb1ZlY3RvcihtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMs
IGluUHJvZ3Jlc3NJZGVudGlmaWVycyk7CisgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogaW5Q
cm9ncmVzc0lkZW50aWZpZXJzKQorICAgICAgICBtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuZ2V0
KGlkZW50aWZpZXIpLT5hYm9ydFdpdGhvdXRDYWxsYmFjaygpOworCisgICAgQVNTRVJUKG1faW5Q
cm9ncmVzc1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworCisgICAgbV9wZW5kaW5nVHJhbnNhY3Rp
b25zLmNsZWFyKCk7CisgICAgbV9vYmplY3RTdG9yZVRyYW5zYWN0aW9uQ291bnRzLmNsZWFyKCk7
CisgICAgbV9vYmplY3RTdG9yZVdyaXRlVHJhbnNhY3Rpb25zLmNsZWFyKCk7CisKKyAgICAvLyBF
cnJvciBvdXQgYWxsIHBlbmRpbmcgY2FsbGJhY2tzCisgICAgVmVjdG9yPHVpbnQ2NF90PiBjYWxs
YmFja0lkZW50aWZpZXJzOworICAgIElEQkVycm9yIGVycm9yID0gSURCRXJyb3I6OnVzZXJEZWxl
dGVFcnJvcigpOworICAgIElEQktleURhdGEga2V5RGF0YTsKKyAgICBJREJHZXRSZXN1bHQgZ2V0
UmVzdWx0OworCisgICAgY29weUtleXNUb1ZlY3RvcihtX2Vycm9yQ2FsbGJhY2tzLCBjYWxsYmFj
a0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGNhbGxiYWNrSWRlbnRp
ZmllcnMpCisgICAgICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGlkZW50aWZpZXIsIGVycm9yKTsK
KworICAgIGNhbGxiYWNrSWRlbnRpZmllcnMuY2xlYXIoKTsKKyAgICBjb3B5S2V5c1RvVmVjdG9y
KG1fa2V5RGF0YUNhbGxiYWNrcywgY2FsbGJhY2tJZGVudGlmaWVycyk7CisgICAgZm9yIChhdXRv
IGlkZW50aWZpZXIgOiBjYWxsYmFja0lkZW50aWZpZXJzKQorICAgICAgICBwZXJmb3JtS2V5RGF0
YUNhbGxiYWNrKGlkZW50aWZpZXIsIGVycm9yLCBrZXlEYXRhKTsKKworICAgIGNhbGxiYWNrSWRl
bnRpZmllcnMuY2xlYXIoKTsKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1fZ2V0UmVzdWx0Q2FsbGJh
Y2tzLCBjYWxsYmFja0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGNh
bGxiYWNrSWRlbnRpZmllcnMpCisgICAgICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxsYmFjayhpZGVu
dGlmaWVyLCBlcnJvciwgZ2V0UmVzdWx0KTsKKworICAgIGNhbGxiYWNrSWRlbnRpZmllcnMuY2xl
YXIoKTsKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1fY291bnRDYWxsYmFja3MsIGNhbGxiYWNrSWRl
bnRpZmllcnMpOworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogY2FsbGJhY2tJZGVudGlmaWVy
cykKKyAgICAgICAgcGVyZm9ybUNvdW50Q2FsbGJhY2soaWRlbnRpZmllciwgZXJyb3IsIDApOwor
CisgICAgLy8gRXJyb3Igb3V0IGFsbCBJREJPcGVuREJSZXF1ZXN0cworICAgIGlmIChtX2N1cnJl
bnRPcGVuREJSZXF1ZXN0KSB7CisgICAgICAgIGVycm9yT3BlbkRCUmVxdWVzdEZvclVzZXJEZWxl
dGUoKm1fY3VycmVudE9wZW5EQlJlcXVlc3QpOworICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1
ZXN0ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRp
bmdPcGVuREJSZXF1ZXN0cykKKyAgICAgICAgZXJyb3JPcGVuREJSZXF1ZXN0Rm9yVXNlckRlbGV0
ZSgqcmVxdWVzdCk7CisKKyAgICBtX3BlbmRpbmdPcGVuREJSZXF1ZXN0cy5jbGVhcigpOworCisg
ICAgLy8gQ2xvc2UgYWxsIG9wZW4gY29ubmVjdGlvbnMKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPj4gb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMgPSBt
X29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zOworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG9w
ZW5EYXRhYmFzZUNvbm5lY3Rpb25zKQorICAgICAgICBjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZl
cigqY29ubmVjdGlvbik7CisKKyAgICAvLyBDYW5jZWwgdGhlIG9wZXJhdGlvbiB0aW1lcgorICAg
IG1fb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lci5zdG9wKCk7CisKKyAgICAvLyBTZXQgdXAg
dGhlIGRhdGFiYXNlIHRvIHJlbWFpbiBhbGl2ZS1idXQtaW5lcnQgdW50aWwgYWxsIG9mIGl0cyBi
YWNrZ3JvdW5kIGFjdGl2aXR5IGZpbmlzaGVzIGFuZCBhbGwKKyAgICAvLyBkYXRhYmFzZSBjb25u
ZWN0aW9ucyBjb25maXJtIHRoYXQgdGhleSBoYXZlIGNsb3NlZC4KKyAgICBtX2hhcmRDbG9zZWRG
b3JVc2VyRGVsZXRlID0gdHJ1ZTsKKyAgICBpZiAoIWRvbmVXaXRoSGFyZENsb3NlKCkpCisgICAg
ICAgIG1faGFyZENsb3NlUHJvdGVjdG9yID0gdGhpczsKKworICAgIC8vIFJlbW92ZSB0aGUgZGF0
YWJhc2UgZnJvbSB0aGUgSURCU2VydmVyJ3Mgc2V0IG9mIG9wZW4gZGF0YWJhc2VzLgorICAgIC8v
IElmIHRoZXJlIGlzIG5vIGluLXByb2dyZXNzIGJhY2tncm91bmQgdGhyZWFkIGFjdGl2aXR5IGZv
ciB0aGlzIGRhdGFiYXNlLCBpdCB3aWxsIGJlIGRlbGV0ZWQgaGVyZS4KKyAgICBtX3NlcnZlci5j
bG9zZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFj
a3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwotICAgIEFTU0VSVChjYWxsYmFjayk7Ci0gICAg
Y2FsbGJhY2soZXJyb3IpOworICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JV
c2VyRGVsZXRlKTsKKyAgICBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKGVycm9yKTsK
IH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURC
S2V5RGF0YSYgcmVzdWx0S2V5KQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxs
YmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwotICAgIEFTU0VSVChjYWxsYmFjayk7Ci0g
ICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdEtleSk7CisgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1f
aGFyZENsb3NlZEZvclVzZXJEZWxldGUpOworICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgY2Fs
bGJhY2soZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRSZXN1bHRDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHREYXRhKQogewogICAg
IGF1dG8gY2FsbGJhY2sgPSBtX2dldFJlc3VsdENhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRp
Zmllcik7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKLSAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0
RGF0YSk7CisgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUp
OworICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdERhdGEp
OwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3Qg
Y291bnQpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY291bnRDYWxsYmFja3MudGFrZShjYWxs
YmFja0lkZW50aWZpZXIpOwotICAgIEFTU0VSVChjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2soZXJy
b3IsIGNvdW50KTsKKyAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRl
bGV0ZSk7CisgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICBjYWxsYmFjayhlcnJvciwgY291bnQp
OwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggYWM4NDYy
NS4uYWU1MDRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTEwMSwxMiArMTAxLDE1IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbUNs
aWVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKKyAgICB2b2lkIGNvbmZpcm1Db25u
ZWN0aW9uQ2xvc2VkT25TZXJ2ZXIoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAgICAg
dm9pZCBkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
biYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpOwogICAg
IHZvaWQgb3BlbkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIo
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAKICAgICB2b2lkIGVucXVldWVUcmFuc2Fj
dGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4mJik7CiAKICAgICB2b2lkIGhh
bmRsZURlbGV0ZShJREJDb25uZWN0aW9uVG9DbGllbnQmLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYp
OworICAgIHZvaWQgaW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCk7CiAKICAgICBzdGF0aWMg
SlNDOjpWTSYgZGF0YWJhc2VUaHJlYWRWTSgpOwogICAgIHN0YXRpYyBKU0M6OkV4ZWNTdGF0ZSYg
ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKTsKQEAgLTEyOSw2ICsxMzIsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgYWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKFJlZlB0cjxV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmKTsKIAorICAgIHZvaWQgY29ubmVjdGlvbkNs
b3NlZEZyb21TZXJ2ZXIoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CisKICAgICAvLyBE
YXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKQEAgLTE2NywxMCArMTcyLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybUFjdGl2YXRlVHJh
bnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJik7CiAKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKEVycm9yQ2FsbGJhY2sp
OwotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB1aW50
NjRfdCBzdG9yZUNhbGxiYWNrKEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB1aW50NjRfdCBzdG9y
ZUNhbGxiYWNrKENvdW50Q2FsbGJhY2spOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihFcnJvckNhbGxiYWNrKTsKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoS2V5RGF0YUNhbGxiYWNrKTsKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihDb3VudENhbGxiYWNrKTsKIAogICAgIHZvaWQgcGVyZm9ybUVycm9yQ2FsbGJhY2so
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwogICAgIHZvaWQg
cGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiwgY29uc3QgSURCS2V5RGF0YSYpOwpAQCAtMTk0LDYgKzE5OSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBleGVjdXRlTmV4dERhdGFiYXNlVGFzaygpOwogICAgIHZvaWQgZXhlY3V0
ZU5leHREYXRhYmFzZVRhc2tSZXBseSgpOwogCisgICAgYm9vbCBkb25lV2l0aEhhcmRDbG9zZSgp
OworCiAgICAgSURCU2VydmVyJiBtX3NlcnZlcjsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIg
bV9pZGVudGlmaWVyOwogICAgIApAQCAtMjAxLDcgKzIwOCw4IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPFNlcnZlck9wZW5EQlJlcXVlc3Q+IG1fY3VycmVudE9wZW5EQlJlcXVlc3Q7CiAKICAgICBM
aXN0SGFzaFNldDxSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPj4gbV9vcGVuRGF0
YWJhc2VDb25uZWN0aW9uczsKLSAgICBIYXNoU2V0PFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24+PiBtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnM7CisgICAgSGFzaFNl
dDxSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPj4gbV9jbGllbnRDbG9zZVBlbmRp
bmdEYXRhYmFzZUNvbm5lY3Rpb25zOworICAgIEhhc2hTZXQ8UmVmUHRyPFVuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbj4+IG1fc2VydmVyQ2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9uczsK
IAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+IG1fdmVyc2lvbkNoYW5n
ZURhdGFiYXNlQ29ubmVjdGlvbjsKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CkBAIC0yMzUsNiArMjQzLDEwIEBAIHBy
aXZhdGU6CiAKICAgICBNZXNzYWdlUXVldWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX2RhdGFiYXNlUXVl
dWU7CiAgICAgTWVzc2FnZVF1ZXVlPENyb3NzVGhyZWFkVGFzaz4gbV9kYXRhYmFzZVJlcGx5UXVl
dWU7CisgICAgc3RkOjphdG9taWM8dWludDY0X3Q+IG1fcXVldWVkVGFza0NvdW50IHsgMCB9Owor
CisgICAgYm9vbCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlIHsgZmFsc2UgfTsKKyAgICBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2U+IG1faGFyZENsb3NlUHJvdGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCmluZGV4IDYyZTBmYTUuLjliODQ3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC04OSw2ICs4OSwxMyBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoKQogICAgIG1fZGF0
YWJhc2UuY29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoKnRoaXMpOwogfQogCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcigpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29uZmlybURp
ZENsb3NlRnJvbVNlcnZlciAtICVzIC0gJSIgUFJJdTY0LCBtX29wZW5SZXF1ZXN0SWRlbnRpZmll
ci5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyKTsKKworICAgIG1f
ZGF0YWJhc2UuY29uZmlybURpZENsb3NlRnJvbVNlcnZlcigqdGhpcyk7Cit9CisKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFu
Z2VFdmVudCAtICVzIC0gJSIgUFJJdTY0LCBtX29wZW5SZXF1ZXN0SWRlbnRpZmllci5sb2dnaW5n
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24uaAppbmRleCBlZDEyMzQ5Li41YWEwMjg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCkBAIC03NCw2ICs3NCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2
b2lkIGRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25D
aGFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
OworICAgIHZvaWQgY29uZmlybURpZENsb3NlRnJvbVNlcnZlcigpOwogCiAgICAgdm9pZCBhYm9y
dFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJFcnJvci5jcHAKaW5kZXggYWY1MTBiMS4uODliMTIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwx
MSBAQCBTdHJpbmcgSURCRXJyb3I6Om1lc3NhZ2UoKSBjb25zdAogICAgIHJldHVybiBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JEZXNjcmlwdGlvbihtX2NvZGUpOwogfQogCitSZWZQdHI8
RE9NRXJyb3I+IElEQkVycm9yOjp0b0RPTUVycm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRE9N
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKG1fY29kZSks
IG1fbWVzc2FnZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAxZWU5YjVkLi4yY2E1YmMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjMsMTEgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCRXJyb3Jf
aAotI2RlZmluZSBJREJFcnJvcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NRXJyb3IuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw4
ICszOSwxNSBAQCBwdWJsaWM6CiAgICAgSURCRXJyb3IoRXhjZXB0aW9uQ29kZSk7CiAgICAgSURC
RXJyb3IoRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAorICAgIHN0YXRp
YyBJREJFcnJvciB1c2VyRGVsZXRlRXJyb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSBk
ZWxldGVkIGJ5IHJlcXVlc3Qgb2YgdGhlIHVzZXIiKSB9OworICAgIH0KKwogICAgIElEQkVycm9y
JiBvcGVyYXRvcj0oY29uc3QgSURCRXJyb3ImKTsKIAorICAgIFJlZlB0cjxET01FcnJvcj4gdG9E
T01FcnJvcigpIGNvbnN0OworCiAgICAgRXhjZXB0aW9uQ29kZSBjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlOyB9CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcgbWVzc2Fn
ZSgpIGNvbnN0OwpAQCAtNzgsNCArODUsMyBAQCBib29sIElEQkVycm9yOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgSURCRXJyb3ImIGVycm9yKQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCRXJyb3JfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJv
Y2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCBlZGE4NzgzLi44ZWEyOTc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMzY3LDYgKzM2NywxNSBAQCB2b2lkIEluUHJvY2Vz
c0lEQlNlcnZlcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYQogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGlkQ2xv
c2VGcm9tU2VydmVyKElEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgUmVmUHRyPEluUHJvY2Vzc0lE
QlNlcnZlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICB1aW50NjRfdCBkYXRhYmFzZUNvbm5l
Y3Rpb25JZGVudGlmaWVyID0gY29ubmVjdGlvbi5pZGVudGlmaWVyKCk7CisgICAgUnVuTG9vcDo6
Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyLCBlcnJvcl0geworICAgICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlk
Q2xvc2VGcm9tU2VydmVyKGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGVycm9yKTsKKyAg
ICB9KTsKK30KKwogdm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6Om5vdGlmeU9wZW5EQlJlcXVlc3RC
bG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiB7CiAgICAgUmVmUHRyPElu
UHJvY2Vzc0lEQlNlcnZlcj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKQEAgLTQwNyw2ICs0MTYsMTQg
QEAgdm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6Om9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXQKICAgICB9KTsKIH0KIAordm9pZCBJblByb2Nlc3NJ
REJTZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcywgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcl0geworICAgICAgICBt
X3NlcnZlci0+Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcihkYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKKyAgICB9KTsKK30KKwogdm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmdldEFsbERh
dGFiYXNlTmFtZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4sIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKIHsKICAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IDFhY2VkM2YuLmVlNWVkNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Q
cm9jZXNzSURCU2VydmVyLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb25Ub1Nl
cnZlcigpIGNvbnN0OwogICAgIElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25u
ZWN0aW9uVG9DbGllbnQoKSBjb25zdDsKKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVy
KCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KIAogICAgIElEQlNlcnZlcjo6SURCU2VydmVy
JiBpZGJTZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQoKTsgfQogCkBAIC03Nyw2ICs3OCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQodWludDY0X3Qg
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIpIGZpbmFsOwogICAgIHZvaWQgZGlkRmlyZVZlcnNpb25D
aGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKSBmaW5hbDsKICAgICB2b2lk
IG9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29uc3QgSURCUmVxdWVzdERhdGEmKSBmaW5hbDsKKyAg
ICB2b2lkIGNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcikgZmluYWw7CiAgICAgdm9pZCBnZXRBbGxEYXRhYmFzZU5hbWVzKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSUQpIGZpbmFsOwogCiAgICAg
Ly8gSURCQ29ubmVjdGlvblRvQ2xpZW50CkBAIC05OCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmKSBmaW5hbDsKICAgICB2
b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24mLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVy
LCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSBmaW5hbDsKICAgICB2b2lkIGRpZFN0YXJ0VHJh
bnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJikgZmluYWw7CisgICAgdm9pZCBkaWRDbG9zZUZyb21TZXJ2ZXIo
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJFcnJvciYp
IGZpbmFsOwogICAgIHZvaWQgbm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwg
dWludDY0X3QgbmV3VmVyc2lvbikgZmluYWw7CiAgICAgdm9pZCBkaWRHZXRBbGxEYXRhYmFzZU5h
bWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhYmFzZU5h
bWVzKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCmluZGV4IDRmZjMzNGQuLmEwZDczOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTg1LDYgKzg1LDExIEBAIENyb3NzVGhyZWFk
Q29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZFNhZmVEYXRhQnVmZmVyPjo6VHlwZSBDcm9z
c1RocmVhZENvcGllCiAgICAgcmV0dXJuIFRocmVhZFNhZmVEYXRhQnVmZmVyKGJ1ZmZlcik7CiB9
CiAKK0Nyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIHN0ZDo6Y2hyb25vOjpzeXN0
ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwg
ZmFsc2UsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+Ojpjb3B5KGNvbnN0
IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQmIHRpbWVQb2ludCkKK3sKKyAg
ICByZXR1cm4gdGltZVBvaW50OworfQorCiAvLyBUZXN0IENyb3NzVGhyZWFkQ29waWVyIHVzaW5n
IENPTVBJTEVfQVNTRVJULgogCiAvLyBWZXJpZnkgdGhhdCBUaHJlYWRTYWZlUmVmQ291bnRlZCBv
YmplY3RzIGdldCBoYW5kbGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oCmluZGV4IDg0OTRiZjUuLmZhODNjNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMTYwLDYgKzE2MCwxMSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4gewogICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVy
QmFzZTxmYWxzZSwgZmFsc2UsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+
IHsKKyAgICB0eXBlZGVmIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgVHlw
ZTsKKyAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFR5cGUmIHNvdXJjZSk7Cit9OworCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IENyb3NzVGhyZWFkQ29waWVyIDogcHVibGljIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxDcm9zc1RocmVhZENvcGllckJhc2VIZWxwZXI6OklzRW51bU9yQ29u
dmVydGlibGVUb0ludGVnZXI8VD46OnZhbHVlLCBDcm9zc1RocmVhZENvcGllckJhc2VIZWxwZXI6
OklzVGhyZWFkU2FmZVJlZkNvdW50ZWRQb2ludGVyPFQ+Ojp2YWx1ZSwgVD4gewogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCBjMWVhOTQ0Li43MWU1MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzIgQEAKIDIw
MTYtMDUtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAgICAgIE1v
ZGVybiBJREI6IEFkZCBzdXBwb3J0IGZvciBzZXJ2ZXIgc2lkZSBjbG9zaW5nIG9mIG9wZW4gZGF0
YWJhc2UgY29ubmVjdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTc4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAtIEltcGxlbWVudCB0aGUgcmVxdWlyZWQgSURCIGRlbGVnYXRlIGNvZGUuCisg
ICAgICAgIC0gTWFrZSBEYXRhYmFzZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhIGNhbGwgdGhl
IHJpZ2h0IG1ldGhvZCBpbiBJREIgc2VydmVyLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNz
L0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEpOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJD
b25uZWN0aW9uVG9DbGllbnQ6OmRpZEdldFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYklE
QkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSURCQ29ubmVjdGlvblRvQ2xpZW50Ojpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKToK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudC5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVj
dGlvblRvQ2xpZW50Lm1lc3NhZ2VzLmluOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkU3RhcnRUcmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlk
Q2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRh
YmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5tZXNzYWdlcy5pbjoKKwor
MjAxNi0wNS0xOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAg
TW9kZXJuIElEQjogTWFrZSBUZXN0UnVubmVyLmNsZWFyQWxsRGF0YWJhc2VzIGFsc28gZGVsZXRl
IEluZGV4ZWREQiBkYXRhYmFzZXMgKG9uY2UgZG9pbmcgc28gaXMgc3VwcG9ydGVkKS4KICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgyMwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmlu
ZGV4IGQwY2JiNDYuLjExOGVmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTksMTMgKzI1OSw4IEBA
IHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0CiAgICAgfSkpOwogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soc3Rk
OjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZFRhc2s+KFt0aGlzLCBjYWxsYmFja0FnZ3JlZ2F0b3Is
IG1vZGlmaWVkU2luY2VdIHsKLQotICAgICAgICAgICAgZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50
cmllc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSk7Ci0gICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfSkpOwot
ICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkluZGV4ZWREQkRhdGFiYXNlcykpCisgICAgICAgIG1faWRiU2VydmVyLT5jbG9zZUFuZERlbGV0
ZURhdGFiYXNlc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVu
dC5jcHAKaW5kZXggZDFjMWIzZGMuLjc1MGU0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5l
Y3Rpb25Ub0NsaWVudC5jcHAKQEAgLTEyNyw2ICsxMjcsMTEgQEAgdm9pZCBXZWJJREJDb25uZWN0
aW9uVG9DbGllbnQ6OmRpZFB1dE9yQWRkKGNvbnN0IFdlYkNvcmU6OklEQlJlc3VsdERhdGEmIHJl
c3VsdEQKIAogdm9pZCBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZEdldFJlY29yZChjb25z
dCBXZWJDb3JlOjpJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogeworICAgIGlmIChyZXN1bHRE
YXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcikgeworICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OkRpZEdldFJlY29yZChyZXN1bHREYXRhKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBhdXRvJiBibG9iRmlsZVBhdGhzID0gcmVz
dWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZSgpLmJsb2JGaWxlUGF0aHMoKTsKICAgICBpZiAoYmxv
YkZpbGVQYXRocy5pc0VtcHR5KCkpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViSURCQ29u
bmVjdGlvblRvU2VydmVyOjpEaWRHZXRSZWNvcmQocmVzdWx0RGF0YSkpOwpAQCAtMTY5LDYgKzE3
NCwxMSBAQCB2b2lkIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkU3RhcnRUcmFuc2FjdGlv
bihjb25zdCBXZWJDb3JlOjpJREJSZXNvdXJjZUlkZQogICAgIHNlbmQoTWVzc2FnZXM6OldlYklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6RGlkU3RhcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGVycm9yKSk7CiB9CiAKK3ZvaWQgV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRD
bG9zZUZyb21TZXJ2ZXIoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OklEQkVycm9yJiBlcnJvcikKK3sKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OkRpZENsb3NlRnJvbVNl
cnZlcihjb25uZWN0aW9uLmlkZW50aWZpZXIoKSwgZXJyb3IpKTsKK30KKwogdm9pZCBXZWJJREJD
b25uZWN0aW9uVG9DbGllbnQ6Om5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IFdlYkNv
cmU6OklEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9s
ZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
SURCQ29ubmVjdGlvblRvU2VydmVyOjpOb3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChyZXF1ZXN0
SWRlbnRpZmllciwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbikpOwpAQCAtMjk0LDYgKzMwNCwxMSBA
QCB2b2lkIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6b3BlbkRCUmVxdWVzdENhbmNlbGxlZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdQogICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9u
KCkuaWRiU2VydmVyKCkub3BlbkRCUmVxdWVzdENhbmNlbGxlZChyZXF1ZXN0RGF0YSk7CiB9CiAK
K3ZvaWQgV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50Ojpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgRGF0YWJhc2VQ
cm9jZXNzOjpzaW5nbGV0b24oKS5pZGJTZXJ2ZXIoKS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworfQorCiB2b2lkIFdlYklEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6Z2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9u
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiB0b3BPcmlnaW4s
IGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgdWludDY0
X3QgY2FsbGJhY2tJRCkKIHsKICAgICBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLmlkYlNl
cnZlcigpLmdldEFsbERhdGFiYXNlTmFtZXMoc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIHRv
cE9yaWdpbiwgb3BlbmluZ09yaWdpbiwgY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQuaAppbmRleCBmZmI4MDk2Li45NDk2YzdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2Vi
SURCQ29ubmVjdGlvblRvQ2xpZW50LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudF9oCi0jZGVmaW5lIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudF9oCisjcHJhZ21hIG9uY2UK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC03Niw2ICs3NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VFdmVudChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OklEQlJlc291cmNl
SWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24p
IGZpbmFsOwogICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBXZWJDb3JlOjpJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
SURCRXJyb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcihXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OklE
QkVycm9yJikgZmluYWw7CiAgICAgdm9pZCBub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25z
dCBXZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50
NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKSBmaW5hbDsKIAogICAgIHZvaWQg
ZGlkR2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZGF0YWJhc2VOYW1lcykgZmluYWw7CkBAIC0xMDYsNiArMTA2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYWJvcnRPcGVuQW5kVXBncmFkZU5lZWRlZCh1aW50NjRfdCBkYXRhYmFzZUNv
bm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRGaXJlVmVyc2lvbkNoYW5nZUV2
ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OklEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgb3Bl
bkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YSYpOworICAg
IHZvaWQgY29uZmlybURpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyKTsKIAogICAgIHZvaWQgZ2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBz
ZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiB0b3BPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3Blbmlu
Z09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKQEAgLTEyNyw0ICsxMjgsMyBAQCBwcml2
YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSNlbmRpZiAvLyBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0
aW9uVG9DbGllbnQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5tZXNzYWdlcy5pbgppbmRleCBmZjky
ODA4Li5jYzM4NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudC5tZXNzYWdlcy5pbgpAQCAtNDUsNiArNDUsNyBAQCBtZXNzYWdlcyAtPiBXZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQgewogICAgIEFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQodWludDY0X3Qg
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlm
aWVyIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgRGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVu
dCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBXZWJDb3JlOjpJREJSZXNv
dXJjZUlkZW50aWZpZXIgcmVxdWVzdElkZW50aWZpZXIpOwogICAgIE9wZW5EQlJlcXVlc3RDYW5j
ZWxsZWQoV2ViQ29yZTo6SURCUmVxdWVzdERhdGEgcmVxdWVzdERhdGEpOworICAgIENvbmZpcm1E
aWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7
CiAKICAgICBHZXRBbGxEYXRhYmFzZU5hbWVzKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVu
dGlmaWVyLCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRvcE9yaWdpbiwgc3Ry
dWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBvcGVuaW5nT3JpZ2luLCB1aW50NjRfdCBj
YWxsYmFja0lEKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0
YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5jcHAKaW5kZXggNTA3ZjI2Ni4uOGY5ZGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKQEAgLTE4Niw2ICsxODYsMTEgQEAgdm9pZCBX
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6Om9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXUKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJDb25uZWN0aW9uVG9D
bGllbnQ6Ok9wZW5EQlJlcXVlc3RDYW5jZWxsZWQocmVxdWVzdERhdGEpKTsKIH0KIAordm9pZCBX
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0
X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJJREJDb25uZWN0aW9uVG9DbGllbnQ6OkNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllcikpOworfQorCiB2b2lkIFdlYklEQkNvbm5lY3Rpb25Ub1Nl
cnZlcjo6Z2V0QWxsRGF0YWJhc2VOYW1lcyhjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIHRvcE9yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5n
T3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYklE
QkNvbm5lY3Rpb25Ub0NsaWVudDo6R2V0QWxsRGF0YWJhc2VOYW1lcyhtX2lkZW50aWZpZXIsIHRv
cE9yaWdpbiwgb3BlbmluZ09yaWdpbiwgY2FsbGJhY2tJRCkpOwpAQCAtMjgyLDExICsyODcsMTYg
QEAgdm9pZCBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQo
dWludDY0X3QgdW5pcXVlRGF0YWJhc2VDb24KICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+Zmly
ZVZlcnNpb25DaGFuZ2VFdmVudCh1bmlxdWVEYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBy
ZXF1ZXN0SWRlbnRpZmllciwgcmVxdWVzdGVkVmVyc2lvbik7CiB9CiAKLXZvaWQgV2ViSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRTdGFydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJFcnJvciYg
ZXJyb3IpCit2b2lkIFdlYklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkU3RhcnRUcmFuc2FjdGlv
bihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5kaWRTdGFy
dFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQogCit2b2lkIFdl
YklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBt
X2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlkQ2xvc2VGcm9tU2VydmVyKGRhdGFiYXNlQ29ubmVjdGlv
bklkZW50aWZpZXIsIGVycm9yKTsKK30KKwogdm9pZCBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6
Om5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
cmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNp
b24pCiB7CiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXItPm5vdGlmeU9wZW5EQlJlcXVlc3RCbG9j
a2VkKHJlcXVlc3RJZGVudGlmaWVyLCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJD
b25uZWN0aW9uVG9TZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAppbmRleCAxMTY0YjU2Li4wNWYz
OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCkBA
IC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJfaAotI2RlZmluZSBXZWJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydE9wZW5BbmRV
cGdyYWRlTmVlZGVkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBm
aW5hbDsKICAgICB2b2lkIGRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWludDY0X3QgZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlm
aWVyJiByZXF1ZXN0SWRlbnRpZmllcikgZmluYWw7CiAgICAgdm9pZCBvcGVuREJSZXF1ZXN0Q2Fu
Y2VsbGVkKGNvbnN0IFdlYkNvcmU6OklEQlJlcXVlc3REYXRhJikgZmluYWw7CisgICAgdm9pZCBj
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50
aWZpZXIpIGZpbmFsOwogCiAgICAgdm9pZCBnZXRBbGxEYXRhYmFzZU5hbWVzKGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSUQpIGZpbmFsOwog
CkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEl0ZXJhdGVDdXJzb3IoY29u
c3QgV2ViQ29yZTo6SURCUmVzdWx0RGF0YSYpOwogICAgIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VF
dmVudCh1aW50NjRfdCB1bmlxdWVEYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRf
dCByZXF1ZXN0ZWRWZXJzaW9uKTsKICAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oY29uc3Qg
V2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OklEQkVycm9yJik7CisgICAgdm9pZCBkaWRDbG9zZUZyb21TZXJ2ZXIodWlu
dDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SURCRXJy
b3ImKTsKICAgICB2b2lkIG5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IFdlYkNvcmU6
OklEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZl
cnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwogICAgIHZvaWQgZGlkR2V0QWxsRGF0YWJhc2VO
YW1lcyh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VO
YW1lcyk7CiAKQEAgLTEwOSw0ICsxMTAsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBXZWJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KaW5kZXggNjVlYzEwM2MuLjJkNWJlMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWRE
Qi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5tZXNzYWdlcy5pbgpAQCAtNDIsNiArNDIsNyBAQCBtZXNzYWdlcyAtPiBXZWJJREJDb25uZWN0
aW9uVG9TZXJ2ZXIgewogCiAgICAgRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRh
YmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBXZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXIg
cmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCiAgICAgRGlkU3Rh
cnRUcmFuc2FjdGlvbihXZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXIgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBXZWJDb3JlOjpJREJFcnJvciBlcnJvcikKKyAgICBEaWRDbG9zZUZyb21TZXJ2
ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SURCRXJy
b3IgZXJyb3IpIGZpbmFsOwogICAgIE5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKFdlYkNvcmU6
OklEQlJlc291cmNlSWRlbnRpZmllciByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVy
c2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKIAogICAgIERpZEdldEFsbERhdGFiYXNlTmFtZXMo
dWludDY0X3QgY2FsbGJhY2tJRCwgVmVjdG9yPFN0cmluZz4gZGF0YWJhc2VOYW1lcykK
</data>
<flag name="review"
          id="303325"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279278</attachid>
            <date>2016-05-18 13:12:25 -0700</date>
            <delta_ts>2016-05-18 13:41:25 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84067</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5NmYyZjk5Yy4uNzVkN2ZiYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA1
LTE4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4g
SURCOiBBZGQgc3VwcG9ydCBmb3Igc2VydmVyIHNpZGUgY2xvc2luZyBvZiBvcGVuIGRhdGFiYXNl
IGNvbm5lY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3ODQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKwor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9oYW5kbGUtdXNlci1kZWxldGUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFu
ZGxlLXVzZXItZGVsZXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9yZXNvdXJjZXMvaGFuZGxlLXVzZXItZGVsZXRlLmpzOiBBZGRlZC4KKwogMjAxNi0w
NS0xOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWJh
c2VsaW5lIGluc3BlY3Rvci9kZWJ1Z2dlci9jb21tYW5kLWxpbmUtYXBpLWV4Y2VwdGlvbi5odG1s
IGFmdGVyIHIyMDEwODAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9oYW5kbGUtdXNlci1kZWxldGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2hhbmRsZS11c2VyLWRlbGV0ZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2MTQ3YgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9oYW5kbGUtdXNlci1kZWxl
dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3RzIHRoYXQgZXhwZWN0ZWQgZXJy
b3JzIGNvbWUgYmFjayBmcm9tIHVzZXIgZGVsZXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworaW5kZXhlZERCID0gc2VsZi5pbmRleGVkREIgfHwgc2VsZi53ZWJraXRJbmRleGVk
REIgfHwgc2VsZi5tb3pJbmRleGVkREIgfHwgc2VsZi5tc0luZGV4ZWREQiB8fCBzZWxmLk9JbmRl
eGVkREI7CisKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYm5hbWUpCitpbmRleGVkREIub3Bl
bihkYm5hbWUpCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAgTmV3IHZl
cnNpb24gLSAxCitTdGFydGVkIHR3byBzcGlubmluZyByZXF1ZXN0cworUmVxdWVzdGVkIGNsZWFy
QWxsRGF0YWJhc2VzCitJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBh
Ym9ydGVkOiBbb2JqZWN0IERPTUVycm9yXQorW1BBU1NdIEJvdGggcmVxdWVzdHMgaGl0IGEgZmFp
bHVyZSBjb25kaXRpb24gKFJlY2VpdmVkIG9uZXJyb3Igb3IgZmFpbGVkIHRvIHN0YXJ0IGEgbmV3
IHJlcXVlc3QgYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQpCitbUEFTU10gRGF0
YWJhc2UgcmVjZWl2ZWQgY29ycmVjdCBlcnJvci4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMzk5MwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9oYW5kbGUtdXNlci1kZWxldGUuaHRt
bApAQCAtMCwwICsxLDEwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2hhbmRsZS11c2VyLWRlbGV0ZS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVz
b3VyY2VzL2hhbmRsZS11c2VyLWRlbGV0ZS5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9yZXNvdXJjZXMvaGFuZGxlLXVzZXItZGVsZXRlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTA5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzL2hhbmRsZS11c2VyLWRlbGV0
ZS5qcwpAQCAtMCwwICsxLDkyIEBACitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBleHBlY3RlZCBl
cnJvcnMgY29tZSBiYWNrIGZyb20gdXNlciBkZWxldGUuIik7CisKK2luZGV4ZWREQlRlc3QocHJl
cGFyZURhdGFiYXNlKTsKKwordmFyIHJlcXVlc3RFcnJvckNvdW50ID0gMDsKK3ZhciBkYXRhYmFz
ZUVycm9yID0gZmFsc2U7CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGlmIChyZXF1ZXN0RXJy
b3JDb3VudCA9PSAyKQorICAgICAgICBsb2coIltQQVNTXSBCb3RoIHJlcXVlc3RzIGhpdCBhIGZh
aWx1cmUgY29uZGl0aW9uIChSZWNlaXZlZCBvbmVycm9yIG9yIGZhaWxlZCB0byBzdGFydCBhIG5l
dyByZXF1ZXN0IGJlY2F1c2UgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkKSIpOworICAgIGVs
c2UKKyAgICAgICAgbG9nKCJbRkFJTF0gIiArIHJlcXVlc3RFcnJvckNvdW50ICsgIiByZXF1ZXN0
KHMpIGhpdCBhIGZhaWx1cmUgY29uZGl0aW9uLiIpOworCisgICAgaWYgKGRhdGFiYXNlRXJyb3Ip
CisgICAgICAgIGxvZygiW1BBU1NdIERhdGFiYXNlIHJlY2VpdmVkIGNvcnJlY3QgZXJyb3IuIik7
CisgICAgZWxzZQorICAgICAgICBsb2coIltGQUlMXSBEYXRhYmFzZSBkaWQgbm90IHJlY2VpdmUg
Y29ycmVjdCBlcnJvci4iKTsKKyAgICAgICAgCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1
bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRlYnVnKG1lc3NhZ2UpOworfQorCitmdW5jdGlv
biBtYXliZUZpbmlzaCgpCit7CisgICAgaWYgKHJlcXVlc3RFcnJvckNvdW50ID09IDIgJiYgZGF0
YWJhc2VFcnJvcikKKyAgICAgICAgZG9uZSgpOworfQorCitmdW5jdGlvbiBwcmVwYXJlRGF0YWJh
c2UoZXZlbnQpCit7CisgICAgbG9nKCJJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lv
biAtICIgKyBldmVudC5vbGRWZXJzaW9uICsgIiBOZXcgdmVyc2lvbiAtICIgKyBldmVudC5uZXdW
ZXJzaW9uKTsKKworICAgIHZhciB2ZXJzaW9uVHJhbnNhY3Rpb24gPSBldmVudC50YXJnZXQudHJh
bnNhY3Rpb247CisgICAgdmFyIGRhdGFiYXNlID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICB2
YXIgb2JqZWN0U3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0
b3JlIik7CisgICAgb2JqZWN0U3RvcmUucHV0KCJiYXIiLCAiZm9vIik7CisgICAgCisgICAgZGF0
YWJhc2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRhdGFiYXNlRXJyb3Ig
PSB0cnVlOworICAgICAgICBtYXliZUZpbmlzaCgpOworICAgIH0KKworICAgIHZhciBoYXNDbGVh
cmVkRGF0YWJhc2VzID0gZmFsc2U7CisgICAgdmFyIHNwaW5HZXQgPSBmdW5jdGlvbigpIHsgCisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmVxID0gb2JqZWN0U3RvcmUuZ2V0KCJmb28i
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICArK3JlcXVlc3RFcnJvckNvdW50
OworICAgICAgICAgICAgbWF5YmVGaW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybjsgICAKKyAg
ICAgICAgfQorICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBzcGluR2V0KCk7CisgICAgICAgICAgICBpZiAoIWhhc0NsZWFyZWREYXRhYmFzZXMpIHsKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VGltZW91dCgidGVzdFJ1bm5lci5jbGVhckFsbERhdGFiYXNlcygpOyIsIDApOworICAg
ICAgICAgICAgICAgICAgICBsb2coIlJlcXVlc3RlZCBjbGVhckFsbERhdGFiYXNlcyIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYXNDbGVhcmVkRGF0YWJhc2VzID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICArK3JlcXVlc3RFcnJvckNvdW50OworICAgICAgICAg
ICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICBtYXliZUZp
bmlzaCgpOworICAgICAgICB9CisgICAgfQorICAgIC8vIFN0YXJ0IHVwIHR3byBnZXQgY3ljbGVz
IHNvIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSByZXF1ZXN0IHRvIGNhbmNlbCB3
aGVuIHRoZSBkYXRhYmFzZSBpcyBkZWxldGVkLgorICAgIHNwaW5HZXQoKTsKKyAgICBzcGluR2V0
KCk7CisgICAgCisgICAgbG9nKCJTdGFydGVkIHR3byBzcGlubmluZyByZXF1ZXN0cyIpCisKKyAg
ICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gYWJvcnRlZDog
IiArIHZlcnNpb25UcmFuc2FjdGlvbi5lcnJvcik7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5z
YWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVw
Z3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGNvbXBsZXRlIik7Cisg
ICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25lcnJvciA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25j
aGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvcjogIiArIGV2ZW50LnR5cGUgKyAiICIg
KyB2ZXJzaW9uVHJhbnNhY3Rpb24uZXJyb3IubmFtZSArICIsICIgKyB2ZXJzaW9uVHJhbnNhY3Rp
b24uZXJyb3IubWVzc2FnZSk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYTU4ZTQxNS4uNjE1YTY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAxNi0w
NS0xOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJu
IElEQjogQWRkIHN1cHBvcnQgZm9yIHNlcnZlciBzaWRlIGNsb3Npbmcgb2Ygb3BlbiBkYXRhYmFz
ZSBjb25uZWN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Nzg0MworCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2hhbmRsZS11c2VyLWRlbGV0
ZS5odG1sCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCBkZWxldGluZyBJbmRleGVkREIg
ZGF0YWJhc2VzLCB0aGUgSURCIHNlcnZlciBuZWVkcyB0aGUgYWJpbGl0eSB0byAKKyAgICAgICAg
ImltbWVkaWF0ZWx5IiBjbG9zZSBhIGN1cnJlbnRseSBvcGVuIElEQiBjb25uZWN0aW9uLgorICAg
ICAgICAKKyAgICAgICAgVG8gZG8gc28gY2xlYW5seSwgdGhlIHNlcnZlciBoYXMgdG86CisgICAg
ICAgIC0gRXJyb3Igb3V0IGFsbCByZXF1ZXN0cyBpdCBrbm93cyBhYm91dAorICAgICAgICAtIEFi
b3J0IGFsbCB0cmFuc2FjdGlvbnMgaXQga25vd3MgYWJvdXQKKyAgICAgICAgLSBUZWxsIHRoZSBj
b25uZWN0aW9uIHRoYXQgaXQgaXMgYmVpbmcgY2xvc2VkCisgICAgICAgIC0gV2FpdCBmb3IgdGhl
IGNvbm5lY3Rpb24gdG8gYWNrbm93bGVkZ2UgdGhhdCBpdCB3YXMgY2xvc2VkIG9uIHRoZSBzZXJ2
ZXIKKyAgICAgICAgCisgICAgICAgIEFuZCB0aGVuIHRoZSBjbGllbnQgaGFzIHRvOgorICAgICAg
ICAtIEVycm9yIG91dCBhbGwgcmVxdWVzdHMgaXQgaGFzbid0IHNlbnQgdG8gdGhlIHNlcnZlcgor
ICAgICAgICAtIEFib3J0IGFsbCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlbid0IGFscmVhZHkgYmVl
biBhYm9ydGVkIGJ5IHRoZSBzZXJ2ZXIKKyAgICAgICAgLSBTZW5kIGFja25vd2xlZGdlbWVudCB0
byB0aGUgc2VydmVyIHRoYXQgaXQgaGFzIGJlZW4gY2xvc2VkLgorCisgICAgICAgIEZpbmFsbHks
IGJlY2F1c2UgdGhlIHN0YXR1cyBvZiBhIGdpdmVuIHJlcXVlc3QgbWlnaHQgYmUgImluIGZsaWdo
dCIgc29tZXdoZXJlIGJldHdlZW4gdGhlIAorICAgICAgICBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQs
IHNvbWUgZGVzaWduIGFzc3VtcHRpb25zIGNoYW5nZS4gVGhpcyByZXF1aXJlcyByZXdvcmtpbmcg
c29tZSBBU1NFUlRTLAorICAgICAgICBudWxsIGNoZWNrcywgZXRjLgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmRpZENsb3NlRnJvbVNlcnZlcik6IERvIHRoZSBoZWF2eSBsaWZ0aW5nIGZvciB0aGUg
aW1tZWRpYXRlIGNsb3NlIG9uCisgICAgICAgICAgdGhlIGNsaWVudCBzaWRlLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIAorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VJZGVudGlmaWVyOjppc1JlbGF0ZWRUb09yaWdpbik6CisgICAgICAgIAor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZlcik6IEVy
cm9yIG91dCBhbGwgb3V0c3RhbmRpbmcgb3BlcmF0aW9ucworICAgICAgICAgIGFuZCBmaXJlIHRo
ZSBhYm9ydCBlcnJvciBvbiBpdHNlbGYuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQkNvbm5lY3Rpb25Qcm94eTo6Y29tcGxldGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHk6OmRpZENsb3NlRnJvbVNlcnZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eTo6Y29uZmlybURp
ZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Qcm94eTo6Zm9yZ2V0QWN0aXZlT3BlcmF0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5oOgorICAgICAgICAKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWRDbG9z
ZUZyb21TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9u
VG9TZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaDoKKyAg
ICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25U
b0NsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25U
b0NsaWVudDo6ZGlkQ2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmg6CisgICAgICAgIAor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZURlbGV0ZUNhbGxiYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpwZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVE
YXRhYmFzZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5k
bGVEYXRhYmFzZU9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6aGFuZGxlQ3VycmVudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5kbGVEZWxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0
ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Ojpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNvbm5lY3Rpb25D
bG9zZWRGcm9tU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZVRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmlzQ3VycmVudGx5SW5V
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW52
b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWN0
aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29tcGxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERh
dGFiYXNlVGFza1JlcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZG9uZVdp
dGhIYXJkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjplcnJvck9wZW5EQlJl
cXVlc3RGb3JVc2VyRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6IERvIHRoZSBoZWF2eSBs
aWZ0aW5nCisgICAgICAgICAgZm9yIHRoZSBpbW1lZGlhdGUgY2xvc2Ugb24gdGhlIHNlcnZlciBz
aWRlLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVzdWx0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNv
dW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6c3RvcmVDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOiBJZiB0aGUg
ZGF0YWJhc2UgaGFzIGJlZW4KKyAgICAgICAgICBoYXJkIHN0b3BwZWQsIGltbWVkaWF0ZWx5IGZp
cmUgYW5kIGVycm9yIGZvciB0aGUgY2FsbGJhY2sgYW5kIHJldHVybiBhIDAtaWRlbnRpZmllciB0
bworICAgICAgICAgIHJlZmxlY3QgdGhpcy4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29uZmly
bURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
RXJyb3I6OnRvRE9NRXJyb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJFcnJvci5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcik6
CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRD
bG9zZUZyb21TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpj
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0ZDo6Y2hyb25vOjpz
eXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+Ojpjb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5oOgorCiAyMDE2LTA1LTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBSZW5kZXJTdHlsZXMgbWFya2VkIHVuaXF1ZSBpbiBt
YXRjaGVkIHByb3BlcnRpZXMgY2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAyOWI0Nzg0Li4wMjhhZjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0yNDUs
NiArMjQ1LDI1IEBAIHZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKICAgICBtYXliZUNsb3NlSW5T
ZXJ2ZXIoKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZTo6ZGlkQ2xvc2VGcm9tU2VydmVyKGNvbnN0
IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRp
ZENsb3NlRnJvbVNlcnZlciAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlm
aWVyKTsKKworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7
CisKKyAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgbV9jbG9zZWRJblNlcnZlciA9IHRy
dWU7CisKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogbV9hY3RpdmVUcmFuc2FjdGlvbnMu
dmFsdWVzKCkpCisgICAgICAgIHRyYW5zYWN0aW9uLT5jb25uZWN0aW9uQ2xvc2VkRnJvbVNlcnZl
cihlcnJvcik7CisKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhp
cyk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2
ZW50KFdURk1vdmUoZXZlbnQpKTsKKworICAgIG1fY29ubmVjdGlvblByb3h5LT5jb25maXJtRGlk
Q2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZTo6bWF5YmVDbG9z
ZUluU2VydmVyKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6Om1heWJlQ2xv
c2VJblNlcnZlciAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCmluZGV4
IDNjZjZkNDcuLjM2MjkzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRB
Ym9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CiAKICAgICB2b2lkIGZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmll
ciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgdm9pZCBkaWRDbG9zZUZyb21TZXJ2
ZXIoY29uc3QgSURCRXJyb3ImKTsKIAogICAgIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5
JiBjb25uZWN0aW9uUHJveHkoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb25Qcm94eS5nZXQoKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlSWRlbnRpZmllci5oCmluZGV4IDMxZTQxYWEuLmVhMWVmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlSWRlbnRpZmllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlSWRlbnRpZmllci5o
CkBAIC0xMDIsNiArMTAyLDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVidWdTdHJpbmcoKSBj
b25zdDsKICNlbmRpZgogCisgICAgYm9vbCBpc1JlbGF0ZWRUb09yaWdpbihjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3Blbmlu
Z09yaWdpbiA9PSBvdGhlciB8fCBtX21haW5GcmFtZU9yaWdpbiA9PSBvdGhlcjsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VOYW1lOwogICAgIFNlY3VyaXR5T3JpZ2lu
RGF0YSBtX29wZW5pbmdPcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggMTEyYjc2NC4uZWY0Y2VkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cApAQCAtMTA3NSw2ICsxMDc1LDI5IEBAIFRocmVhZElkZW50aWZpZXIgSURCVHJhbnNhY3Rpb246
Om9yaWdpblRocmVhZElEKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkSUQoKTsKIH0KIAordm9pZCBJREJUcmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21T
ZXJ2ZXIoY29uc3QgSURCRXJyb3ImIGVycm9yKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIgLSAlcyIsIGVycm9yLm1lc3Nh
Z2UoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkFib3J0aW5nOworCisgICAgVmVjdG9yPFJlZlB0cjxJREJDbGllbnQ6OlRyYW5z
YWN0aW9uT3BlcmF0aW9uPj4gb3BlcmF0aW9uczsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV90
cmFuc2FjdGlvbk9wZXJhdGlvbk1hcCwgb3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG9wZXJhdGlvbnMpCisgICAgICAgIG9wZXJhdGlvbi0+Y29tcGxldGVkKElEQlJl
c3VsdERhdGE6OmVycm9yKG9wZXJhdGlvbi0+aWRlbnRpZmllcigpLCBlcnJvcikpOworCisgICAg
Y29ubmVjdGlvblByb3h5KCkuZm9yZ2V0QWN0aXZlT3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKKwor
ICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS5jbGVhcigpOworICAgIG1fYWJvcnRRdWV1
ZS5jbGVhcigpOworICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuY2xlYXIoKTsKKworICAg
IG1faWRiRXJyb3IgPSBlcnJvcjsKKyAgICBtX2RvbUVycm9yID0gZXJyb3IudG9ET01FcnJvcigp
OworICAgIGZpcmVPbkFib3J0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggY2EyMTU0Ny4uMTkxY2NmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCkBAIC0xNDUsNiArMTQ1LDggQEAgcHVibGljOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBv
cmlnaW5UaHJlYWRJRCgpIGNvbnN0OwogCisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRnJvbVNl
cnZlcihjb25zdCBJREJFcnJvciYpOworCiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uKElE
QkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgSURCT3BlbkRCUmVxdWVzdCop
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuY3BwCmluZGV4IGNlOGM4YjAuLmExYjQ3ZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uUHJveHkuY3BwCkBAIC0yNDksNyArMjQ5LDggQEAgdm9pZCBJREJD
b25uZWN0aW9uUHJveHk6OmNvbXBsZXRlT3BlcmF0aW9uKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCiAgICAgICAgIG9wZXJhdGlvbiA9IG1fYWN0aXZlT3BlcmF0aW9ucy50YWtlKHJl
c3VsdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKG9wZXJh
dGlvbik7CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJldHVybjsKIAogICAgIHBlcmZv
cm1DYWxsYmFja09uQ29ycmVjdFRocmVhZCgqb3BlcmF0aW9uLCAmVHJhbnNhY3Rpb25PcGVyYXRp
b246OmNvbXBsZXRlZCwgcmVzdWx0RGF0YSk7CiB9CkBAIC0zODgsNiArMzg5LDI5IEBAIHZvaWQg
SURCQ29ubmVjdGlvblByb3h5OjpkYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQoSURCRGF0YWJhc2Um
IGRhdGFiYXNlKQogICAgIGNhbGxDb25uZWN0aW9uT25NYWluVGhyZWFkKCZJREJDb25uZWN0aW9u
VG9TZXJ2ZXI6OmRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCwgZGF0YWJhc2UuZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBJREJDb25uZWN0aW9uUHJveHk6OmRpZENs
b3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBkYXRhYmFzZTsK
KyAgICB7CisgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZUNvbm5lY3Rpb25N
YXBMb2NrKTsKKyAgICAgICAgZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbk1hcC5nZXQo
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgfQorCisgICAgLy8gSWYgdGhlIElE
QkRhdGFiYXNlIG9iamVjdCBpcyBnb25lLCBtZXNzYWdlIGJhY2sgdG8gdGhlIHNlcnZlciBzbyBp
dCBkb2Vzbid0IGhhbmcKKyAgICAvLyB3YWl0aW5nIGZvciBhIHJlcGx5IHRoYXQgd2lsbCBuZXZl
ciBjb21lLgorICAgIGlmICghZGF0YWJhc2UpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVG9TZXJ2
ZXIuY29uZmlybURpZENsb3NlRnJvbVNlcnZlcihkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBlcmZvcm1DYWxsYmFja09uQ29ycmVj
dFRocmVhZCgqZGF0YWJhc2UsICZJREJEYXRhYmFzZTo6ZGlkQ2xvc2VGcm9tU2VydmVyLCBlcnJv
cik7Cit9CisKK3ZvaWQgSURCQ29ubmVjdGlvblByb3h5Ojpjb25maXJtRGlkQ2xvc2VGcm9tU2Vy
dmVyKElEQkRhdGFiYXNlJiBkYXRhYmFzZSkKK3sKKyAgICBjYWxsQ29ubmVjdGlvbk9uTWFpblRo
cmVhZCgmSURCQ29ubmVjdGlvblRvU2VydmVyOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyLCBk
YXRhYmFzZS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkpOworfQorCiB2b2lkIElEQkNv
bm5lY3Rpb25Qcm94eTo6c2NoZWR1bGVNYWluVGhyZWFkVGFza3MoKQogewogICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIobV9tYWluVGhyZWFkVGFza0xvY2spOwpAQCAtNDM4LDYgKzQ2MiwxNCBAQCB2
b2lkIElEQkNvbm5lY3Rpb25Qcm94eTo6dW5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbihJREJE
YXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXAucmVtb3ZlKGRh
dGFiYXNlLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURCQ29u
bmVjdGlvblByb3h5Ojpmb3JnZXRBY3RpdmVPcGVyYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8
VHJhbnNhY3Rpb25PcGVyYXRpb24+PiYgb3BlcmF0aW9ucykKK3sKKyAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25Mb2NrKTsKKworICAgIGZvciAoYXV0byYgb3Bl
cmF0aW9uIDogb3BlcmF0aW9ucykKKyAgICAgICAgbV9hY3RpdmVPcGVyYXRpb25zLnJlbW92ZShv
cGVyYXRpb24tPmlkZW50aWZpZXIoKSk7Cit9CisKIH0gLy8gbmFtZXNhcGNlIElEQkNsaWVudAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmgKaW5kZXggMzg3
ZDdkMC4uYzg0YThiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uUHJveHkuaApAQCAtOTMsNiArOTMsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBJREJUcmFuc2FjdGlv
biYpOwogICAgIHZvaWQgZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKElEQkRhdGFiYXNlJik7CiAK
KyAgICB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgY29uZmlybURpZENsb3NlRnJv
bVNlcnZlcihJREJEYXRhYmFzZSYpOworCiAgICAgdm9pZCBhYm9ydE9wZW5BbmRVcGdyYWRlTmVl
ZGVkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIAogICAgIHZvaWQgY29tcGxl
dGVPcGVyYXRpb24oY29uc3QgSURCUmVzdWx0RGF0YSYpOwpAQCAtMTA5LDYgKzExMiw4IEBAIHB1
YmxpYzoKIAogICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiB0YWtlSURCT3BlbkRCUmVxdWVz
dChJREJPcGVuREJSZXF1ZXN0Jik7CiAKKyAgICB2b2lkIGZvcmdldEFjdGl2ZU9wZXJhdGlvbnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4+Jik7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBjb21wbGV0ZU9wZW5EQlJlcXVlc3QoY29uc3QgSURCUmVzdWx0RGF0YSYpOwog
ICAgIGJvb2wgaGFzUmVjb3JkT2ZUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbiYpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCBmYmU3ZjQxLi42NjJh
YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcApAQCAtMzE2LDYgKzMxNiwy
MiBAQCB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYQogICAgIG1fcHJveHktPmRpZFN0YXJ0VHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKK3ZvaWQgSURCQ29ubmVj
dGlvblRvU2VydmVyOjpkaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZENsb3NlRnJvbVNlcnZlciIpOworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBtX3Byb3h5LT5kaWRDbG9zZUZyb21TZXJ2ZXIo
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOworfQorCit2b2lkIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFz
ZUNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0
aW9uVG9TZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgbV9kZWxlZ2F0ZS0+Y29uZmlybURpZENsb3NlRnJvbVNlcnZl
cihkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKK30KKwogdm9pZCBJREJDb25uZWN0aW9u
VG9TZXJ2ZXI6Om5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90
IG5ld1ZlcnNpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZl
cjo6ZGlkU3RhcnRUcmFuc2FjdGlvbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCmlu
ZGV4IGQwY2UwNjguLmM3OTMzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKQEAg
LTEwNiw2ICsxMDYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBjb25maXJtRGlkQ2xvc2VGcm9t
U2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1
aW50NjRfdCBuZXdWZXJzaW9uKTsKICAgICB2b2lkIG9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29u
c3QgSURCUmVxdWVzdERhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVy
RGVsZWdhdGUuaAppbmRleCAyYzAzZDRlLi5jYjRlNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdh
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29u
bmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQodWludDY0X3QgZGF0YWJhc2VD
b25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmlyZVZlcnNpb25DaGFu
Z2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIG9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29uc3QgSURCUmVxdWVzdERhdGEmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllcikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldEFsbERh
dGFiYXNlTmFtZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4sIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJ
RCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCmluZGV4IDRiZjQxZTAu
LmVjOTMxMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCkBAIC0xMzMsNiAr
MTMzLDExIEBAIHZvaWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRTdGFydFRyYW5zYWN0aW9u
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhCiAgICAgbV9kZWxlZ2F0ZS0+ZGlkU3Rh
cnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGVycm9yKTsKIH0KIAordm9pZCBJ
REJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZENsb3NlRnJvbVNlcnZlcihVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBt
X2RlbGVnYXRlLT5kaWRDbG9zZUZyb21TZXJ2ZXIoY29ubmVjdGlvbiwgZXJyb3IpOworfQorCiB2
b2lkIElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6bm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xk
VmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKIHsKICAgICBtX2RlbGVnYXRlLT5ub3RpZnlP
cGVuREJSZXF1ZXN0QmxvY2tlZChyZXF1ZXN0SWRlbnRpZmllciwgb2xkVmVyc2lvbiwgbmV3VmVy
c2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKaW5kZXggN2UyNDY0Ny4uZjIxZjkx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QkNvbm5lY3Rpb25Ub0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaApAQCAtNjYsNiArNjYsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoVW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmll
ciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CiAgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0
aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYpOworICAgIHZvaWQgZGlkQ2xvc2VGcm9tU2VydmVyKFVuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQkVycm9yJik7CiAKICAgICB2b2lkIG5vdGlmeU9w
ZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElk
ZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29u
bmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCmluZGV4IDQyYzU0YWIu
LjYyY2FmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5o
CkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNp
b24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcihVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJFcnJvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lv
bikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZEdldEFsbERhdGFiYXNlTmFtZXModWludDY0
X3QgY2FsbGJhY2tJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFiYXNlTmFtZXMpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAKaW5kZXggMjFiYTc1NS4uNDFjMGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTMzLDcgKzMz
LDkgQEAKICNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVT
eXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogCkBAIC0zODgsNiArMzkwLDE0IEBAIHZvaWQgSURCU2VydmVyOjpvcGVu
REJSZXF1ZXN0Q2FuY2VsbGVkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSkKICAg
ICB1bmlxdWVJREJEYXRhYmFzZS0+b3BlbkRCUmVxdWVzdENhbmNlbGxlZChyZXF1ZXN0RGF0YS5y
ZXF1ZXN0SWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmNvbmZpcm1EaWRDbG9z
ZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcikKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIik7
CisKKyAgICBpZiAoYXV0byBkYXRhYmFzZUNvbm5lY3Rpb24gPSBtX2RhdGFiYXNlQ29ubmVjdGlv
bnMuZ2V0KGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAgICBkYXRhYmFzZUNv
bm5lY3Rpb24tPmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoKTsKK30KKwogdm9pZCBJREJTZXJ2
ZXI6OmdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3Qgc2VydmVyQ29ubmVjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2luLCBjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2
ZXI6OnBlcmZvcm1HZXRBbGxEYXRhYmFzZU5hbWVzLCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmll
ciwgbWFpbkZyYW1lT3JpZ2luLCBvcGVuaW5nT3JpZ2luLCBjYWxsYmFja0lEKSk7CkBAIC00Njgs
MTAgKzQ3OCw3NSBAQCB2b2lkIElEQlNlcnZlcjo6aGFuZGxlVGFza1JlcGxpZXNPbk1haW5UaHJl
YWQoKQogICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwogfQogCi12b2lkIElEQlNlcnZlcjo6
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1f
Y2xvY2s6OnRpbWVfcG9pbnQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRs
ZXIpCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVEZWxldGVDYWxsYmFja0lEKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQgPSAw
OworICAgIHJldHVybiArK2N1cnJlbnRJRDsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmNsb3NlQW5k
RGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0
aW1lX3BvaW50IG1vZGlmaWNhdGlvblRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGdlbmVyYXRlRGVsZXRl
Q2FsbGJhY2tJRCgpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZWxldGVEYXRhYmFzZUNvbXBs
ZXRpb25IYW5kbGVycy5hZGQoY2FsbGJhY2tJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisK
KyAgICAvLyBJZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSwgZG9uJ3Qg
Ym90aCBkb2luZyBhbnl0aGluZy4KKyAgICBpZiAobW9kaWZpY2F0aW9uVGltZSA+IHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpKSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9z
ZUFuZERlbGV0ZURhdGFiYXNlcywgY2FsbGJhY2tJRCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG9wZW5EYXRhYmFzZXM7CisgICAg
Zm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFzZUNvbm5lY3Rpb25zLnZhbHVlcygpKQor
ICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVjdGlvbi0+ZGF0YWJhc2UoKSk7CisKKyAg
ICBmb3IgKGF1dG8qIGRhdGFiYXNlIDogb3BlbkRhdGFiYXNlcykKKyAgICAgICAgZGF0YWJhc2Ut
PmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpOworCisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UsIG1vZGlmaWNhdGlvblRpbWUsIGNhbGxiYWNrSUQp
KTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lu
cyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gZ2VuZXJhdGVEZWxldGVDYWxsYmFja0lEKCk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rl
bGV0ZURhdGFiYXNlQ29tcGxldGlvbkhhbmRsZXJzLmFkZChjYWxsYmFja0lELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKworICAgIEhhc2hTZXQ8VW5pcXVlSURCRGF0YWJhc2UqPiBvcGVuRGF0
YWJhc2VzOworICAgIGZvciAoYXV0byogY29ubmVjdGlvbiA6IG1fZGF0YWJhc2VDb25uZWN0aW9u
cy52YWx1ZXMoKSkgeworICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gY29ubmVjdGlv
bi0+ZGF0YWJhc2UoKS5pZGVudGlmaWVyKCk7CisgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDog
b3JpZ2lucykgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNSZWxhdGVkVG9PcmlnaW4o
b3JpZ2luKSkgeworICAgICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKCZjb25uZWN0aW9u
LT5kYXRhYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byogZGF0YWJhc2UgOiBvcGVuRGF0YWJhc2Vz
KQorICAgICAgICBkYXRhYmFzZS0+aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCk7CisKKyAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZl
cjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucywgb3JpZ2lucywgY2Fs
bGJhY2tJRCkpOworfQorCit2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzTW9kaWZpZWRTaW5jZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
LCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGVsZXRp
bmcgdGhlIGZpbGVzLgorICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNl
cywgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkZWxldGlu
ZyB0aGUgZmlsZXMuCisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
LCBjYWxsYmFja0lEKSk7Cit9CisKK3ZvaWQgSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXModWludDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NjI2KQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0
YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lEKTsKKyAgICBBU1NFUlQoY2Fs
bGJhY2spOworICAgIGNhbGxiYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IDhjZWUzOGYuLjgzMjA5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWJvcnRPcGVuQW5kVXBncmFkZU5lZWRlZCh1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb3BlbkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBJ
REJSZXF1ZXN0RGF0YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybURpZENsb3Nl
RnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJD
b25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVP
cmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJRCk7CiAKQEAgLTk3LDYgKzk4LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9p
bnQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0
aW9uSGFuZGxlcik7CiAKIHByaXZhdGU6CiAgICAgSURCU2VydmVyKElEQkJhY2tpbmdTdG9yZVRl
bXBvcmFyeUZpbGVIYW5kbGVyJik7CkBAIC0xMDcsNiArMTA5LDEwIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwZXJmb3JtR2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9u
SWRlbnRpZmllciwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4sIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJ
RCk7CiAgICAgdm9pZCBkaWRHZXRBbGxEYXRhYmFzZU5hbWVzKHVpbnQ2NF90IHNlcnZlckNvbm5l
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YWJhc2VOYW1lcyk7CiAKKyAgICB2b2lkIHBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFi
YXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCwg
dWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBwZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRh
YmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgdWludDY0
X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFz
ZXModWludDY0X3QgY2FsbGJhY2tJRCk7CisKICAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZVRocmVh
ZEVudHJ5KHZvaWQqKTsKICAgICB2b2lkIGRhdGFiYXNlUnVuTG9vcCgpOwogICAgIHZvaWQgaGFu
ZGxlVGFza1JlcGxpZXNPbk1haW5UaHJlYWQoKTsKQEAgLTEyNSw2ICsxMzEsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8dWludDY0X3QsIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbio+IG1f
ZGF0YWJhc2VDb25uZWN0aW9uczsKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbio+IG1fdHJhbnNhY3Rpb25zOwogCisgICAgSGFz
aE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9kZWxldGVEYXRhYmFzZUNv
bXBsZXRpb25IYW5kbGVyczsKKwogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsK
ICAgICBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgbV9iYWNraW5nU3RvcmVU
ZW1wb3JhcnlGaWxlSGFuZGxlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBl
ZGE4ZGI5Li5kNGJkNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIElEQlNlcnZlciB7Ci0gICAgCisKIFVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRh
YmFzZShJREJTZXJ2ZXImIHNlcnZlciwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQogICAgIDogbV9zZXJ2ZXIoc2VydmVyKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCkBAIC02Myw3ICs2Myw4IEBAIFVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0
YWJhc2UoKQogICAgIEFTU0VSVCghaGFzVW5maW5pc2hlZFRyYW5zYWN0aW9ucygpKTsKICAgICBB
U1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKG1fb3Bl
bkRhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9jbG9zZVBlbmRp
bmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fY2xpZW50Q2xv
c2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3Nl
cnZlckNsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpKTsKIH0KIAogY29u
c3QgSURCRGF0YWJhc2VJbmZvJiBVbmlxdWVJREJEYXRhYmFzZTo6aW5mbygpIGNvbnN0CkBAIC03
NCw2ICs3NSw5IEBAIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgVW5pcXVlSURCRGF0YWJhc2U6Omlu
Zm8oKSBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VDb25uZWN0
aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvbiwgY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhKQogeworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkRhdGFiYXNlQ29ubmVjdGlvbiIpOworICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9y
VXNlckRlbGV0ZSk7CisKICAgICBtX3BlbmRpbmdPcGVuREJSZXF1ZXN0cy5hZGQoU2VydmVyT3Bl
bkRCUmVxdWVzdDo6Y3JlYXRlKGNvbm5lY3Rpb24sIHJlcXVlc3REYXRhKSk7CiAKICAgICAvLyBB
biBvcGVuIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBzbyB3ZSBjYW4ndCBwb3Nz
aWJseSBoYW5kbGUgdGhpcyBvbmUgeWV0LgpAQCAtMjcxLDcgKzI3NSw3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lv
bikKIAogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCi0gICAg
aWYgKG1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5k
aW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY2xpZW50Q2xvc2VQZW5k
aW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nT3BlbkRCUmVxdWVz
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fc2VydmVyLmNsb3NlVW5pcXVlSURCRGF0YWJhc2Uo
KnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjgzLDYgKzI4Nyw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURhdGFiYXNlT3BlcmF0aW9ucygpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMgLSBUaGVyZSBhcmUgJXUgcGVuZGlu
ZyIsIG1fcGVuZGluZ09wZW5EQlJlcXVlc3RzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlKTsKIAogICAgIGlmIChtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJv
Z3Jlc3MpCiAgICAgICAgIHJldHVybjsKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMoKQogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6aGFuZGxlQ3VycmVudE9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aGFuZGxlQ3VycmVudE9wZXJhdGlvbiIpOwotCisgICAg
QVNTRVJUKCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKICAgICBBU1NFUlQobV9jdXJyZW50
T3BlbkRCUmVxdWVzdCk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CkBAIC0zMzksMzIgKzM0NCw1MiBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJh
dGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogICAgIHJldHVybiArK2N1cnJlbnRJRDsKIH0K
IAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2soRXJyb3JDYWxsYmFj
ayBjYWxsYmFjaykKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKKyAgICBpZiAobV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSkgeworICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVy
cm9yKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICB1aW50NjRfdCBpZGVudGlm
aWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKICAgICBBU1NFUlQoIW1f
ZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fZXJyb3JDYWxsYmFj
a3MuYWRkKGlkZW50aWZpZXIsIGNhbGxiYWNrKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0K
IAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2soS2V5RGF0YUNhbGxi
YWNrIGNhbGxiYWNrKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CisgICAgaWYgKG1faGFyZENs
b3NlZEZvclVzZXJEZWxldGUpIHsKKyAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxl
dGVFcnJvcigpLCB7IH0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICB1aW50NjRf
dCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKICAgICBB
U1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9r
ZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBjYWxsYmFjayk7CiAgICAgcmV0dXJuIGlk
ZW50aWZpZXI7CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNr
KEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsK
KyAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgeworICAgICAgICBjYWxsYmFjayhJ
REJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCksIHsgfSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKwogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRl
bnRpZmllcigpOwogICAgIEFTU0VSVCghbV9nZXRSZXN1bHRDYWxsYmFja3MuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgIG1fZ2V0UmVzdWx0Q2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBjYWxs
YmFjayk7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRh
dGFiYXNlOjpzdG9yZUNhbGxiYWNrKENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCit1aW50NjRfdCBV
bmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKENvdW50Q2FsbGJhY2sg
Y2FsbGJhY2spCiB7CisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKKyAgICAg
ICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpLCAwKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCiAgICAgdWludDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVl
Q2FsbGJhY2tJZGVudGlmaWVyKCk7CiAgICAgQVNTRVJUKCFtX2NvdW50Q2FsbGJhY2tzLmNvbnRh
aW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2NvdW50Q2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBj
YWxsYmFjayk7CkBAIC0zNzQsNiArMzk5LDcgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2soQ291bnRDYWxsYmFjayBjYWxsYmFjaykKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmhhbmRsZURlbGV0ZShJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb24sIGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5kbGVEZWxldGUiKTsKKyAgICBBU1NFUlQoIW1f
aGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogCiAgICAgbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMu
YWRkKFNlcnZlck9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSkp
OwogICAgIGhhbmRsZURhdGFiYXNlT3BlcmF0aW9ucygpOwpAQCAtNTM4LDcgKzU2NCwxMCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNr
KTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNh
bGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKKwogICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCkBAIC01NzAsNyArNTk5LDkgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3Jl
Iik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7
CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxs
YmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
KiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVj
dFN0b3JlTmFtZSk7CiAgICAgaWYgKCFpbmZvKSB7CkBAIC02MDksNyArNjQwLDkgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsK
IAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNr
KTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CiB9CiAKQEAgLTYzOCw3ICs2NzEs
OSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5k
ZXgiKTsKIAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNr
KTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNh
bGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtNjczLDcgKzcwOCw5IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCIpOwogCi0gICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOworICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoY2FsbGJhY2spOworICAgIGlm
ICghY2FsbGJhY2tJRCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogb2JqZWN0U3RvcmVJ
bmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0
b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pIHsKQEAgLTcyMSw3ICs3
NTgsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JB
ZGQiKTsKIAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNr
KTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNh
bGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9u
SWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0
YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtODU3LDcgKzg5Niw5IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQktlCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsKKyAg
ICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICh1aW50NjRfdCBp
bmRleElkZW50aWZpZXIgPSByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSkKICAgICAgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCksIGluZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIHJhbmdl
KSk7CkBAIC05MDQsNyArOTQ1LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQo
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXkKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6OmdldENvdW50Iik7CiAKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFjayhjYWxsYmFjayk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihjYWxsYmFjayk7CisgICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICBy
ZXR1cm47CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lELCByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCksIHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkpOwogfQogCkBA
IC05MzUsNyArOTc4LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2soY2FsbGJhY2spOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoY2FsbGJhY2spOworICAgIGlmICghY2FsbGJhY2tJRCkKKyAgICAgICAgcmV0
dXJuOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CiB9CiAKQEAgLTk2Miw3ICsxMDA3LDkgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQkMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IiKTsKIAot
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsK
KyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlm
aWVyKCksIGluZm8pKTsKIH0KIApAQCAtOTkwLDcgKzEwMzcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvciIpOwogCi0gICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOworICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoY2FsbGJhY2spOworICAgIGlmICgh
Y2FsbGJhY2tJRCkKKyAgICAgICAgcmV0dXJuOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRl
Q3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEuY3Vyc29ySWRlbnRpZmllcigpLCBrZXksIGNvdW50KSk7CiB9CiAKQEAgLTEw
MzIsNyArMTA4MSw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9u
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQoJnRy
YW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7CisgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihjYWxsYmFjayk7Cisg
ICAgaWYgKCFjYWxsYmFja0lEKQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXByZXBhcmVU
b0ZpbmlzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSkgewogICAgICAgICBpZiAoIW1fb3BlbkRh
dGFiYXNlQ29ubmVjdGlvbnMuY29udGFpbnMoJnRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlv
bigpKSkgewpAQCAtMTA3NCw3ICsxMTI1LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJv
cnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKIAog
ICAgIEFTU0VSVCgmdHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9
PSB0aGlzKTsKIAotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxi
YWNrKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KGNhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrSUQpCisgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghcHJlcGFyZVRvRmluaXNoVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKSB7CiAgICAgICAg
IGlmICghbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5jb250YWlucygmdHJhbnNhY3Rpb24uZGF0
YWJhc2VDb25uZWN0aW9uKCkpKSB7CkBAIC0xMTQ5LDcgKzEyMDIsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudChVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24mCiAKICAgICBpZiAobV92ZXJzaW9uQ2hhbmdlRGF0YWJhc2VDb25uZWN0aW9uID09
ICZjb25uZWN0aW9uKSB7CiAgICAgICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikg
ewotICAgICAgICAgICAgbV9jbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChXVEZN
b3ZlKG1fdmVyc2lvbkNoYW5nZURhdGFiYXNlQ29ubmVjdGlvbikpOworICAgICAgICAgICAgbV9j
bGllbnRDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChXVEZNb3ZlKG1fdmVyc2lv
bkNoYW5nZURhdGFiYXNlQ29ubmVjdGlvbikpOwogCiAgICAgICAgICAgICBhdXRvIHRyYW5zYWN0
aW9uSWRlbnRpZmllciA9IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pbmZvKCkuaWRlbnRp
ZmllcigpOwogICAgICAgICAgICAgaWYgKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5jb250YWlu
cyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKSB7CkBAIC0xMTc3LDcgKzEyMzAsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudChVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24mCiAgICAgICAgIG5vdGlmeUN1cnJlbnRSZXF1ZXN0Q29ubmVjdGlvbkNs
b3NlZE9yRmlyZWRWZXJzaW9uQ2hhbmdlRXZlbnQoY29ubmVjdGlvbi5pZGVudGlmaWVyKCkpOwog
CiAgICAgaWYgKGNvbm5lY3Rpb24uaGFzTm9uRmluaXNoZWRUcmFuc2FjdGlvbnMoKSkgewotICAg
ICAgICBtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuYWRkKFdURk1vdmUocHJvdGVj
dGVkQ29ubmVjdGlvbikpOworICAgICAgICBtX2NsaWVudENsb3NlUGVuZGluZ0RhdGFiYXNlQ29u
bmVjdGlvbnMuYWRkKFdURk1vdmUocHJvdGVjdGVkQ29ubmVjdGlvbikpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMTg1LDkgKzEyMzgsMzggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
JgogICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKIH0KIAordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21TZXJ2ZXIoVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjpjb25uZWN0aW9uQ2xv
c2VkRnJvbVNlcnZlciAtICVzICglIiBQUkl1NjQgIikiLCBjb25uZWN0aW9uLm9wZW5SZXF1ZXN0
SWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjb25uZWN0aW9uLmlk
ZW50aWZpZXIoKSk7CisKKyAgICBpZiAobV9jbGllbnRDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5l
Y3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0aW9uKSkgeworICAgICAgICBBU1NFUlQoIW1fb3BlbkRh
dGFiYXNlQ29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKKyAgICAgICAgQVNTRVJU
KCFtX3NlcnZlckNsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5l
Y3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24+IHByb3RlY3RlZENvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAgbV9v
cGVuRGF0YWJhc2VDb25uZWN0aW9ucy5yZW1vdmUoJmNvbm5lY3Rpb24pOworCisgICAgY29ubmVj
dGlvbi5jb25uZWN0aW9uVG9DbGllbnQoKS5kaWRDbG9zZUZyb21TZXJ2ZXIoY29ubmVjdGlvbiwg
SURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsKKworICAgIG1fc2VydmVyQ2xvc2VQZW5kaW5n
RGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoV1RGTW92ZShwcm90ZWN0ZWRDb25uZWN0aW9uKSk7Cit9
CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjpjb25m
aXJtRGlkQ2xvc2VGcm9tU2VydmVyIC0gJXMgKCUiIFBSSXU2NCAiKSIsIGNvbm5lY3Rpb24ub3Bl
blJlcXVlc3RJZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNvbm5l
Y3Rpb24uaWRlbnRpZmllcigpKTsKKworICAgIEFTU0VSVChtX3NlcnZlckNsb3NlUGVuZGluZ0Rh
dGFiYXNlQ29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKKyAgICBtX3NlcnZlckNs
b3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMucmVtb3ZlKCZjb25uZWN0aW9uKTsKK30KKwog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZVRyYW5zYWN0aW9uKFJlZjxVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uPiYmIHRyYW5zYWN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZVRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlv
bi0+aW5mbygpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1f
aGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5pbmZv
KCkubW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsK
IApAQCAtMTE5OCw3ICsxMjgwLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZVRy
YW5zYWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmIHQKIAogYm9vbCBV
bmlxdWVJREJEYXRhYmFzZTo6aXNDdXJyZW50bHlJblVzZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9jbG9zZVBlbmRpbmdE
YXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMu
aXNFbXB0eSgpIHx8IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgfHwgbV92ZXJzaW9uQ2hhbmdlRGF0
YWJhc2VDb25uZWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1faXNPcGVu
aW5nQmFja2luZ1N0b3JlIHx8IG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzczsKKyAgICBy
ZXR1cm4gIW1fb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpIHx8ICFtX2NsaWVudENs
b3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpIHx8ICFtX3BlbmRpbmdPcGVu
REJSZXF1ZXN0cy5pc0VtcHR5KCkgfHwgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCB8fCBtX3ZlcnNp
b25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24gfHwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
fHwgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgfHwgbV9kZWxldGVCYWNraW5nU3RvcmVJblByb2dy
ZXNzOwogfQogCiBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYXNVbmZpbmlzaGVkVHJhbnNhY3Rp
b25zKCkgY29uc3QKQEAgLTEyMDksNiArMTI5MSw4IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2U6
Omhhc1VuZmluaXNoZWRUcmFuc2FjdGlvbnMoKSBjb25zdAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjppbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRp
bWVyKCkiKTsKKyAgICBBU1NFUlQoIW1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOworCiAgICAg
aWYgKCFtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9vcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KQEAgLTEy
MTYsNiArMTMwMCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Omludm9rZU9wZXJhdGlvbkFu
ZFRyYW5zYWN0aW9uVGltZXIoKQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5k
VHJhbnNhY3Rpb25UaW1lckZpcmVkKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyRmlyZWQiKTsKKyAg
ICBBU1NFUlQoIW1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogCiAgICAgUmVmUHRyPFVuaXF1
ZUlEQkRhdGFiYXNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogCkBAIC0xMjY4LDcgKzEzNTMsOSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3Rv
cmUoVW5pcXVlSURCRGF0YWJhc2VUcmFucwogICAgICAgICByZWZUcmFuc2FjdGlvbi0+ZGlkQWN0
aXZhdGVJbkJhY2tpbmdTdG9yZShlcnJvcik7CiAgICAgfTsKIAotICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKGNhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNr
SUQpCisgICAgICAgIHJldHVybjsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2Fj
dGlvbkluQmFja2luZ1N0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkpKTsKIH0K
IApAQCAtMTM3MywyNiArMTQ2MCwyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbkNvbXBsZXRlZChSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbgogICAgIH0K
IAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlQ29ubmVjdGlvbigpLmhhc05vbkZpbmlz
aGVkVHJhbnNhY3Rpb25zKCkpCi0gICAgICAgIG1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0
aW9ucy5yZW1vdmUoJnRyYW5zYWN0aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb24oKSk7CisgICAgICAg
IG1fY2xpZW50Q2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5yZW1vdmUoJnRyYW5zYWN0
aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb24oKSk7CiAKICAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pCiAgICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uID0gbnVsbHB0cjsKIAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGRhdGFiYXNl
IGhhZCBpdHMgYmFja2luZyBzdG9yZSBkZWxldGVkIGJ1dCB0aGVyZSB3ZXJlIGEgZmV3IG91dHN0
YW5kaW5nIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLgogICAgIC8vIElmIHRoaXMgdHJhbnNhY3Rp
b24gY29tcGxldGluZyB3YXMgdGhlIGxhc3Qgb2YgdGhvc2Ugb3BlcmF0aW9ucywgd2UgY2FuIGZp
bmFsbHkgZGVsZXRlIHRoaXMgVW5pcXVlSURCRGF0YWJhc2UuCi0gICAgaWYgKG1fY2xvc2VQZW5k
aW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nT3BlbkRCUmVxdWVz
dHMuaXNFbXB0eSgpICYmICFtX2RhdGFiYXNlSW5mbykgeworICAgIGlmIChtX2NsaWVudENsb3Nl
UGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ09wZW5EQlJl
cXVlc3RzLmlzRW1wdHkoKSAmJiAhbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgbV9zZXJ2ZXIu
Y2xvc2VVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBQcmV2aW91c2x5IGJsb2NrZWQgb3BlcmF0aW9ucyBtaWdodCBiZSBydW5uYWJsZS4K
LSAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCk7CisgICAgaWYgKCFtX2hh
cmRDbG9zZWRGb3JVc2VyRGVsZXRlKQorICAgICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2Fj
dGlvblRpbWVyKCk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRh
c2soc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkVGFzaz4mJiB0YXNrKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgbV9kYXRhYmFzZVF1ZXVlLmFwcGVuZChXVEZNb3ZlKHRh
c2spKTsKKyAgICArK21fcXVldWVkVGFza0NvdW50OwogCiAgICAgbV9zZXJ2ZXIucG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2spKTsKIH0KQEAgLTE0MDEsNiArMTQ5MCw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShzdGQ6OnVuaXF1ZV9wdHI8
Q3Jvc3NUaHJlYWRUYXNrPiYmCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOworICAgICsrbV9xdWV1
ZWRUYXNrQ291bnQ7CiAKICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0
YWJhc2VUYXNrUmVwbHkpKTsKIH0KQEAgLTE0MDgsNDkgKzE0OTgsMTQ3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NU
aHJlYWRUYXNrPiYmCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpleGVjdXRlTmV4dERhdGFiYXNl
VGFzaygpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcXVl
dWVkVGFza0NvdW50KTsKIAogICAgIGF1dG8gdGFzayA9IG1fZGF0YWJhc2VRdWV1ZS50cnlHZXRN
ZXNzYWdlKCk7CiAgICAgQVNTRVJUKHRhc2spOwogCiAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsK
KyAgICAtLW1fcXVldWVkVGFza0NvdW50OwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpl
eGVjdXRlTmV4dERhdGFiYXNlVGFza1JlcGx5KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX3F1ZXVlZFRhc2tDb3VudCk7CiAKICAgICBhdXRvIHRhc2sgPSBt
X2RhdGFiYXNlUmVwbHlRdWV1ZS50cnlHZXRNZXNzYWdlKCk7CiAgICAgQVNTRVJUKHRhc2spOwog
CiAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKKyAgICAtLW1fcXVldWVkVGFza0NvdW50OworCisg
ICAgLy8gSWYgdGhpcyBkYXRhYmFzZSB3YXMgZm9yY2UgY2xvc2VkIChlLmcuIGZvciBhIHVzZXIg
ZGVsZXRlKSBhbmQgdGhlcmUgYXJlIG5vIG1vcmUKKyAgICAvLyBxdWV1ZWQgdGFza3MgbGVmdCwg
ZGVsZXRlIHRoaXMuCisgICAgaWYgKG1faGFyZENsb3NlUHJvdGVjdG9yICYmIGRvbmVXaXRoSGFy
ZENsb3NlKCkpCisgICAgICAgIG1faGFyZENsb3NlUHJvdGVjdG9yID0gbnVsbHB0cjsKK30KKwor
Ym9vbCBVbmlxdWVJREJEYXRhYmFzZTo6ZG9uZVdpdGhIYXJkQ2xvc2UoKQoreworICAgIHJldHVy
biAoIW1fcXVldWVkVGFza0NvdW50ICYmIG1fc2VydmVyQ2xvc2VQZW5kaW5nRGF0YWJhc2VDb25u
ZWN0aW9ucy5pc0VtcHR5KCkpOworfQorCitzdGF0aWMgdm9pZCBlcnJvck9wZW5EQlJlcXVlc3RG
b3JVc2VyRGVsZXRlKFNlcnZlck9wZW5EQlJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBy
ZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihyZXF1ZXN0LnJlcXVlc3REYXRhKCkucmVxdWVz
dElkZW50aWZpZXIoKSwgSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsKKyAgICBpZiAocmVx
dWVzdC5pc09wZW5SZXF1ZXN0KCkpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbigpLmRpZE9w
ZW5EYXRhYmFzZShyZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
KCkuZGlkRGVsZXRlRGF0YWJhc2UocmVzdWx0KTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAi
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSAtIENhbmNlbGxp
bmcgKCVpLCAlaSwgJWksICVpKSBjYWxsYmFja3MiLCBtX2Vycm9yQ2FsbGJhY2tzLnNpemUoKSwg
bV9rZXlEYXRhQ2FsbGJhY2tzLnNpemUoKSwgbV9nZXRSZXN1bHRDYWxsYmFja3Muc2l6ZSgpLCBt
X2NvdW50Q2FsbGJhY2tzLnNpemUoKSk7CisKKyAgICAvLyBFcnJvciBvdXQgYWxsIHRyYW5zYWN0
aW9ucworICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IGluUHJvZ3Jlc3NJZGVudGlm
aWVyczsKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucywgaW5Q
cm9ncmVzc0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBpblByb2dy
ZXNzSWRlbnRpZmllcnMpCisgICAgICAgIG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5nZXQoaWRl
bnRpZmllciktPmFib3J0V2l0aG91dENhbGxiYWNrKCk7CisKKyAgICBBU1NFUlQobV9pblByb2dy
ZXNzVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMu
Y2xlYXIoKTsKKyAgICBtX29iamVjdFN0b3JlVHJhbnNhY3Rpb25Db3VudHMuY2xlYXIoKTsKKyAg
ICBtX29iamVjdFN0b3JlV3JpdGVUcmFuc2FjdGlvbnMuY2xlYXIoKTsKKworICAgIC8vIEVycm9y
IG91dCBhbGwgcGVuZGluZyBjYWxsYmFja3MKKyAgICBWZWN0b3I8dWludDY0X3Q+IGNhbGxiYWNr
SWRlbnRpZmllcnM7CisgICAgSURCRXJyb3IgZXJyb3IgPSBJREJFcnJvcjo6dXNlckRlbGV0ZUVy
cm9yKCk7CisgICAgSURCS2V5RGF0YSBrZXlEYXRhOworICAgIElEQkdldFJlc3VsdCBnZXRSZXN1
bHQ7CisKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1fZXJyb3JDYWxsYmFja3MsIGNhbGxiYWNrSWRl
bnRpZmllcnMpOworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogY2FsbGJhY2tJZGVudGlmaWVy
cykKKyAgICAgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soaWRlbnRpZmllciwgZXJyb3IpOworCisg
ICAgY2FsbGJhY2tJZGVudGlmaWVycy5jbGVhcigpOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9r
ZXlEYXRhQ2FsbGJhY2tzLCBjYWxsYmFja0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8gaWRl
bnRpZmllciA6IGNhbGxiYWNrSWRlbnRpZmllcnMpCisgICAgICAgIHBlcmZvcm1LZXlEYXRhQ2Fs
bGJhY2soaWRlbnRpZmllciwgZXJyb3IsIGtleURhdGEpOworCisgICAgY2FsbGJhY2tJZGVudGlm
aWVycy5jbGVhcigpOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9nZXRSZXN1bHRDYWxsYmFja3Ms
IGNhbGxiYWNrSWRlbnRpZmllcnMpOworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogY2FsbGJh
Y2tJZGVudGlmaWVycykKKyAgICAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGlkZW50aWZp
ZXIsIGVycm9yLCBnZXRSZXN1bHQpOworCisgICAgY2FsbGJhY2tJZGVudGlmaWVycy5jbGVhcigp
OworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9jb3VudENhbGxiYWNrcywgY2FsbGJhY2tJZGVudGlm
aWVycyk7CisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBjYWxsYmFja0lkZW50aWZpZXJzKQor
ICAgICAgICBwZXJmb3JtQ291bnRDYWxsYmFjayhpZGVudGlmaWVyLCBlcnJvciwgMCk7CisKKyAg
ICAvLyBFcnJvciBvdXQgYWxsIElEQk9wZW5EQlJlcXVlc3RzCisgICAgaWYgKG1fY3VycmVudE9w
ZW5EQlJlcXVlc3QpIHsKKyAgICAgICAgZXJyb3JPcGVuREJSZXF1ZXN0Rm9yVXNlckRlbGV0ZSgq
bV9jdXJyZW50T3BlbkRCUmVxdWVzdCk7CisgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3Qg
PSBudWxscHRyOworICAgIH0KKworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ09w
ZW5EQlJlcXVlc3RzKQorICAgICAgICBlcnJvck9wZW5EQlJlcXVlc3RGb3JVc2VyRGVsZXRlKCpy
ZXF1ZXN0KTsKKworICAgIG1fcGVuZGluZ09wZW5EQlJlcXVlc3RzLmNsZWFyKCk7CisKKyAgICAv
LyBDbG9zZSBhbGwgb3BlbiBjb25uZWN0aW9ucworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+PiBvcGVuRGF0YWJhc2VDb25uZWN0aW9ucyA9IG1fb3Bl
bkRhdGFiYXNlQ29ubmVjdGlvbnM7CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogb3BlbkRh
dGFiYXNlQ29ubmVjdGlvbnMpCisgICAgICAgIGNvbm5lY3Rpb25DbG9zZWRGcm9tU2VydmVyKCpj
b25uZWN0aW9uKTsKKworICAgIC8vIENhbmNlbCB0aGUgb3BlcmF0aW9uIHRpbWVyCisgICAgbV9v
cGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyLnN0b3AoKTsKKworICAgIC8vIFNldCB1cCB0aGUg
ZGF0YWJhc2UgdG8gcmVtYWluIGFsaXZlLWJ1dC1pbmVydCB1bnRpbCBhbGwgb2YgaXRzIGJhY2tn
cm91bmQgYWN0aXZpdHkgZmluaXNoZXMgYW5kIGFsbAorICAgIC8vIGRhdGFiYXNlIGNvbm5lY3Rp
b25zIGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgY2xvc2VkLgorICAgIG1faGFyZENsb3NlZEZvclVz
ZXJEZWxldGUgPSB0cnVlOworICAgIGlmICghZG9uZVdpdGhIYXJkQ2xvc2UoKSkKKyAgICAgICAg
bV9oYXJkQ2xvc2VQcm90ZWN0b3IgPSB0aGlzOworCisgICAgLy8gUmVtb3ZlIHRoZSBkYXRhYmFz
ZSBmcm9tIHRoZSBJREJTZXJ2ZXIncyBzZXQgb2Ygb3BlbiBkYXRhYmFzZXMuCisgICAgLy8gSWYg
dGhlcmUgaXMgbm8gaW4tcHJvZ3Jlc3MgYmFja2dyb3VuZCB0aHJlYWQgYWN0aXZpdHkgZm9yIHRo
aXMgZGF0YWJhc2UsIGl0IHdpbGwgYmUgZGVsZXRlZCBoZXJlLgorICAgIG1fc2VydmVyLmNsb3Nl
VW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJiBlcnJvcikKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrcy50
YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKLSAgICBjYWxs
YmFjayhlcnJvcik7CisgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJE
ZWxldGUpOworICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogfQog
CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlE
YXRhJiByZXN1bHRLZXkpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fa2V5RGF0YUNhbGxiYWNr
cy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKLSAgICBj
YWxsYmFjayhlcnJvciwgcmVzdWx0S2V5KTsKKyAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJk
Q2xvc2VkRm9yVXNlckRlbGV0ZSk7CisgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICBjYWxsYmFj
ayhlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldFJlc3VsdENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdERhdGEpCiB7CiAgICAgYXV0
byBjYWxsYmFjayA9IG1fZ2V0UmVzdWx0Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVy
KTsKLSAgICBBU1NFUlQoY2FsbGJhY2spOwotICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHREYXRh
KTsKKyAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7Cisg
ICAgaWYgKGNhbGxiYWNrKQorICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0RGF0YSk7CiB9
CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBjb3Vu
dCkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jb3VudENhbGxiYWNrcy50YWtlKGNhbGxiYWNr
SWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKLSAgICBjYWxsYmFjayhlcnJvciwg
Y291bnQpOworICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
KTsKKyAgICBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKGVycm9yLCBjb3VudCk7CiB9
CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBhYzg0NjI1Li5h
ZTUwNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTAxLDEyICsxMDEsMTUgQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRGVzdHJveWVkKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50
KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOworICAgIHZvaWQgY29uZmlybUNvbm5lY3Rp
b25DbG9zZWRPblNlcnZlcihVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKICAgICB2b2lk
IGRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9p
ZCBvcGVuREJSZXF1ZXN0Q2FuY2VsbGVkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVx
dWVzdElkZW50aWZpZXIpOworICAgIHZvaWQgY29uZmlybURpZENsb3NlRnJvbVNlcnZlcihVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKIAogICAgIHZvaWQgZW5xdWV1ZVRyYW5zYWN0aW9u
KFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmKTsKIAogICAgIHZvaWQgaGFuZGxl
RGVsZXRlKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYsIGNvbnN0IElEQlJlcXVlc3REYXRhJik7Cisg
ICAgdm9pZCBpbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKIAogICAgIHN0YXRpYyBKU0M6
OlZNJiBkYXRhYmFzZVRocmVhZFZNKCk7CiAgICAgc3RhdGljIEpTQzo6RXhlY1N0YXRlJiBkYXRh
YmFzZVRocmVhZEV4ZWNTdGF0ZSgpOwpAQCAtMTI5LDYgKzEzMiw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoUmVmUHRyPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+JiYpOwogCisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2Vk
RnJvbVNlcnZlcihVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKKwogICAgIC8vIERhdGFi
YXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwpAQCAtMTY3LDEwICsxNzIsMTAgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRpZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQWN0aXZhdGVUcmFuc2Fj
dGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soRXJyb3JDYWxsYmFjayk7Ci0g
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFjayhLZXlEYXRhQ2FsbGJhY2spOwotICAgIHVpbnQ2NF90
IHN0b3JlQ2FsbGJhY2soR2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHVpbnQ2NF90IHN0b3JlQ2Fs
bGJhY2soQ291bnRDYWxsYmFjayk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKEVycm9yQ2FsbGJhY2spOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihLZXlEYXRhQ2FsbGJhY2spOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKENvdW50Q2FsbGJhY2spOwogCiAgICAgdm9pZCBwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBwZXJm
b3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImLCBjb25zdCBJREJLZXlEYXRhJik7CkBAIC0xOTQsNiArMTk5LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrKCk7CiAgICAgdm9pZCBleGVjdXRlTmV4
dERhdGFiYXNlVGFza1JlcGx5KCk7CiAKKyAgICBib29sIGRvbmVXaXRoSGFyZENsb3NlKCk7CisK
ICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CiAgICAgCkBAIC0yMDEsNyArMjA4LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
U2VydmVyT3BlbkRCUmVxdWVzdD4gbV9jdXJyZW50T3BlbkRCUmVxdWVzdDsKIAogICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+PiBtX29wZW5EYXRhYmFz
ZUNvbm5lY3Rpb25zOwotICAgIEhhc2hTZXQ8UmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbj4+IG1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9uczsKKyAgICBIYXNoU2V0PFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+PiBtX2NsaWVudENsb3NlUGVuZGluZ0Rh
dGFiYXNlQ29ubmVjdGlvbnM7CisgICAgSGFzaFNldDxSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uPj4gbV9zZXJ2ZXJDbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zOwogCiAg
ICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gbV92ZXJzaW9uQ2hhbmdlRGF0
YWJhc2VDb25uZWN0aW9uOwogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
PiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKQEAgLTIzNSw2ICsyNDMsMTAgQEAgcHJpdmF0
ZToKIAogICAgIE1lc3NhZ2VRdWV1ZTxDcm9zc1RocmVhZFRhc2s+IG1fZGF0YWJhc2VRdWV1ZTsK
ICAgICBNZXNzYWdlUXVldWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX2RhdGFiYXNlUmVwbHlRdWV1ZTsK
KyAgICBzdGQ6OmF0b21pYzx1aW50NjRfdD4gbV9xdWV1ZWRUYXNrQ291bnQgeyAwIH07CisKKyAg
ICBib29sIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUgeyBmYWxzZSB9OworICAgIFJlZlB0cjxV
bmlxdWVJREJEYXRhYmFzZT4gbV9oYXJkQ2xvc2VQcm90ZWN0b3I7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5j
cHAKaW5kZXggNjJlMGZhNS4uOWI4NDdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbi5jcHAKQEAgLTg5LDYgKzg5LDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgpCiAgICAgbV9kYXRhYmFz
ZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CiB9CiAKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xv
c2VGcm9tU2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVyLmxv
Z2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIpOworCisgICAgbV9kYXRh
YmFzZS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKK30KKwogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRGaXJlVmVyc2lvbkNoYW5nZUV2
ZW50IC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IGVkMTIzNDkuLjVhYTAyODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgKQEAgLTc0LDYgKzc0LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkRGVsZXRlSW5kZXgoY29uc3QgSURCUmVzdWx0RGF0YSYpOwogICAgIHZvaWQg
ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJl
cXVlc3RJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5n
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Cisg
ICAgdm9pZCBjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCk7CiAKICAgICB2b2lkIGFib3J0VHJh
bnNhY3Rpb25XaXRob3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
RXJyb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVy
cm9yLmNwcAppbmRleCBhZjUxMGIxLi44OWIxMjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY1LDExIEBA
IFN0cmluZyBJREJFcnJvcjo6bWVzc2FnZSgpIGNvbnN0CiAgICAgcmV0dXJuIElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpnZXRFcnJvckRlc2NyaXB0aW9uKG1fY29kZSk7CiB9CiAKK1JlZlB0cjxET01F
cnJvcj4gSURCRXJyb3I6OnRvRE9NRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBET01FcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUobV9jb2RlKSwgbV9t
ZXNzYWdlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJFcnJvci5oCmluZGV4IDFlZTliNWQuLjJjYTViYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywx
MSArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJFcnJvcl9oCi0j
ZGVmaW5lIElEQkVycm9yX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKKyNpbmNsdWRlICJET01FcnJvci5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5LDggKzM5
LDE1IEBAIHB1YmxpYzoKICAgICBJREJFcnJvcihFeGNlcHRpb25Db2RlKTsKICAgICBJREJFcnJv
cihFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCisgICAgc3RhdGljIElE
QkVycm9yIHVzZXJEZWxldGVFcnJvcigpCisgICAgeworICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIGRlbGV0
ZWQgYnkgcmVxdWVzdCBvZiB0aGUgdXNlciIpIH07CisgICAgfQorCiAgICAgSURCRXJyb3ImIG9w
ZXJhdG9yPShjb25zdCBJREJFcnJvciYpOwogCisgICAgUmVmUHRyPERPTUVycm9yPiB0b0RPTUVy
cm9yKCkgY29uc3Q7CisKICAgICBFeGNlcHRpb25Db2RlIGNvZGUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGU7IH0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIFN0cmluZyBtZXNzYWdlKCkg
Y29uc3Q7CkBAIC03OCw0ICs4NSwzIEBAIGJvb2wgSURCRXJyb3I6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBJREJFcnJvciYgZXJyb3IpCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJFcnJvcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IGVkYTg3ODMuLjhlYTI5NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0zNjcsNiArMzY3LDE1IEBAIHZvaWQgSW5Qcm9jZXNzSURC
U2VydmVyOjpkaWRTdGFydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhCiAgICAgfSk7CiB9CiAKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRDbG9zZUZy
b21TZXJ2ZXIoSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2Vy
dmVyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlv
bklkZW50aWZpZXIgPSBjb25uZWN0aW9uLmlkZW50aWZpZXIoKTsKKyAgICBSdW5Mb29wOjpjdXJy
ZW50KCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMsIGRhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIsIGVycm9yXSB7CisgICAgICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5kaWRDbG9z
ZUZyb21TZXJ2ZXIoZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOworICAgIH0p
OworfQorCiB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6bm90aWZ5T3BlbkRCUmVxdWVzdEJsb2Nr
ZWQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0
X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKIHsKICAgICBSZWZQdHI8SW5Qcm9j
ZXNzSURCU2VydmVyPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwpAQCAtNDA3LDYgKzQxNiwxNCBAQCB2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6b3BlbkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdAogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNl
cnZlcjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzLCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyXSB7CisgICAgICAgIG1fc2Vy
dmVyLT5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZp
ZXIpOworICAgIH0pOworfQorCiB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Z2V0QWxsRGF0YWJh
c2VOYW1lcyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdpbiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ewogICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHByb3RlY3RlZFRoaXModGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9j
ZXNzSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmgKaW5kZXggMWFjZWQzZi4uZWU1ZWQ3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvblRvU2VydmVy
KCkgY29uc3Q7CiAgICAgSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rp
b25Ub0NsaWVudCgpIGNvbnN0OworICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7
IHJldHVybiBtX3NlcnZlci5nZXQoKTsgfQogCiAgICAgSURCU2VydmVyOjpJREJTZXJ2ZXImIGlk
YlNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyLmdldCgpOyB9CiAKQEAgLTc3LDYgKzc4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYWJvcnRPcGVuQW5kVXBncmFkZU5lZWRlZCh1aW50NjRfdCBkYXRh
YmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllcikgZmluYWw7CiAgICAgdm9pZCBkaWRGaXJlVmVyc2lvbkNoYW5n
ZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpIGZpbmFsOwogICAgIHZvaWQgb3Bl
bkRCUmVxdWVzdENhbmNlbGxlZChjb25zdCBJREJSZXF1ZXN0RGF0YSYpIGZpbmFsOworICAgIHZv
aWQgY29uZmlybURpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyKSBmaW5hbDsKICAgICB2b2lkIGdldEFsbERhdGFiYXNlTmFtZXMoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgb3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJRCkgZmluYWw7CiAKICAgICAvLyBJ
REJDb25uZWN0aW9uVG9DbGllbnQKQEAgLTk4LDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZEl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYpIGZpbmFsOwogICAgIHZvaWQg
ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVp
bnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pIGZpbmFsOwogICAgIHZvaWQgZGlkU3RhcnRUcmFuc2Fj
dGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlRnJvbVNlcnZlcihJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQkVycm9yJikgZmlu
YWw7CiAgICAgdm9pZCBub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50
NjRfdCBuZXdWZXJzaW9uKSBmaW5hbDsKICAgICB2b2lkIGRpZEdldEFsbERhdGFiYXNlTmFtZXMo
dWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFiYXNlTmFtZXMp
IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5j
cHAKaW5kZXggNGZmMzM0ZC4uYTBkNzM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmNwcApAQCAtODUsNiArODUsMTEgQEAgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+OjpUeXBlIENyb3NzVGhy
ZWFkQ29waWUKICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoYnVmZmVyKTsKIH0KIAor
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxz
ZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludD46OmNvcHkoY29uc3Qgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCYgdGltZVBvaW50KQoreworICAgIHJl
dHVybiB0aW1lUG9pbnQ7Cit9CisKIC8vIFRlc3QgQ3Jvc3NUaHJlYWRDb3BpZXIgdXNpbmcgQ09N
UElMRV9BU1NFUlQuCiAKIC8vIFZlcmlmeSB0aGF0IFRocmVhZFNhZmVSZWZDb3VudGVkIG9iamVj
dHMgZ2V0IGhhbmRsZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3Nz
VGhyZWFkQ29waWVyLmgKaW5kZXggODQ5NGJmNS4uZmE4M2M2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC0xNjAsNiArMTYwLDExIEBAIHRlbXBs
YXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZFNh
ZmVEYXRhQnVmZmVyPiB7CiAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBmYWxzZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludD4gewor
ICAgIHR5cGVkZWYgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBUeXBlOwor
ICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgVHlwZSYgc291cmNlKTsKK307CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPENyb3NzVGhyZWFkQ29waWVyQmFzZUhlbHBlcjo6SXNFbnVtT3JDb252ZXJ0
aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIENyb3NzVGhyZWFkQ29waWVyQmFzZUhlbHBlcjo6SXNU
aHJlYWRTYWZlUmVmQ291bnRlZFBvaW50ZXI8VD46OnZhbHVlLCBUPiB7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGMxZWE5NDQuLjY5OGM5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMiBAQAogMjAxNi0w
NS0xOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgTW9kZXJu
IElEQjogQWRkIHN1cHBvcnQgZm9yIHNlcnZlciBzaWRlIGNsb3Npbmcgb2Ygb3BlbiBkYXRhYmFz
ZSBjb25uZWN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Nzg0MworCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgLSBJbXBsZW1lbnQgdGhlIHJlcXVpcmVkIElEQiBkZWxlZ2F0ZSBjb2RlLgorICAg
ICAgICAtIE1ha2UgRGF0YWJhc2VQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSBjYWxsIHRoZSBy
aWdodCBtZXRob2QgaW4gSURCIHNlcnZlci4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9E
YXRhYmFzZVByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhKToKKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
V2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCQ29u
bmVjdGlvblRvQ2xpZW50OjpkaWRHZXRSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJD
b25uZWN0aW9uVG9DbGllbnQ6OmRpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6Cisg
ICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGll
bnQuaDoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rp
b25Ub0NsaWVudC5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFN0YXJ0VHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZENs
b3NlRnJvbVNlcnZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJh
c2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW46CisKKzIw
MTYtMDUtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIE1v
ZGVybiBJREI6IE1ha2UgVGVzdFJ1bm5lci5jbGVhckFsbERhdGFiYXNlcyBhbHNvIGRlbGV0ZSBJ
bmRleGVkREIgZGF0YWJhc2VzIChvbmNlIGRvaW5nIHNvIGlzIHN1cHBvcnRlZCkuCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4MjMKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRl
eCBkMGNiYjQ2Li4xMThlZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU5LDEzICsyNTksOCBAQCB2
b2lkIERhdGFiYXNlUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdAogICAgIH0pKTsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6
bWFrZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNrPihbdGhpcywgY2FsbGJhY2tBZ2dyZWdhdG9yLCBt
b2RpZmllZFNpbmNlXSB7Ci0KLSAgICAgICAgICAgIGRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJp
ZXNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UpOwotICAgICAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0pKTsKLSAg
ICB9CisgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJ
bmRleGVkREJEYXRhYmFzZXMpKQorICAgICAgICBtX2lkYlNlcnZlci0+Y2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQu
Y3BwCmluZGV4IGQxYzFiM2RjLi43NTBlNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0
aW9uVG9DbGllbnQuY3BwCkBAIC0xMjcsNiArMTI3LDExIEBAIHZvaWQgV2ViSURCQ29ubmVjdGlv
blRvQ2xpZW50OjpkaWRQdXRPckFkZChjb25zdCBXZWJDb3JlOjpJREJSZXN1bHREYXRhJiByZXN1
bHRECiAKIHZvaWQgV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRHZXRSZWNvcmQoY29uc3Qg
V2ViQ29yZTo6SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKKyAgICBpZiAocmVzdWx0RGF0
YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpIHsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViSURCQ29ubmVjdGlvblRvU2VydmVyOjpEaWRHZXRSZWNvcmQocmVzdWx0RGF0YSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byYgYmxvYkZpbGVQYXRocyA9IHJlc3Vs
dERhdGEuZ2V0UmVzdWx0KCkudmFsdWUoKS5ibG9iRmlsZVBhdGhzKCk7CiAgICAgaWYgKGJsb2JG
aWxlUGF0aHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYklEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6RGlkR2V0UmVjb3JkKHJlc3VsdERhdGEpKTsKQEAgLTE2OSw2ICsxNzQs
MTEgQEAgdm9pZCBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZFN0YXJ0VHJhbnNhY3Rpb24o
Y29uc3QgV2ViQ29yZTo6SURCUmVzb3VyY2VJZGUKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJD
b25uZWN0aW9uVG9TZXJ2ZXI6OkRpZFN0YXJ0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBlcnJvcikpOwogfQogCit2b2lkIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ2xv
c2VGcm9tU2VydmVyKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJREJFcnJvciYgZXJyb3IpCit7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViSURCQ29ubmVjdGlvblRvU2VydmVyOjpEaWRDbG9zZUZyb21TZXJ2
ZXIoY29ubmVjdGlvbi5pZGVudGlmaWVyKCksIGVycm9yKSk7Cit9CisKIHZvaWQgV2ViSURCQ29u
bmVjdGlvblRvQ2xpZW50Ojpub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBXZWJDb3Jl
OjpJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRW
ZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6Tm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQocmVxdWVzdElk
ZW50aWZpZXIsIG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKTsKQEAgLTI5NCw2ICszMDQsMTEgQEAg
dm9pZCBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQ6Om9wZW5EQlJlcXVlc3RDYW5jZWxsZWQoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXUKICAgICBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigp
LmlkYlNlcnZlcigpLm9wZW5EQlJlcXVlc3RDYW5jZWxsZWQocmVxdWVzdERhdGEpOwogfQogCit2
b2lkIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcih1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIERhdGFiYXNlUHJv
Y2Vzczo6c2luZ2xldG9uKCkuaWRiU2VydmVyKCkuY29uZmlybURpZENsb3NlRnJvbVNlcnZlcihk
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKK30KKwogdm9pZCBXZWJJREJDb25uZWN0aW9u
VG9DbGllbnQ6OmdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3Qgc2VydmVyQ29ubmVjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiB7CiAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5pZGJTZXJ2
ZXIoKS5nZXRBbGxEYXRhYmFzZU5hbWVzKHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLCB0b3BP
cmlnaW4sIG9wZW5pbmdPcmlnaW4sIGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVj
dGlvblRvQ2xpZW50LmgKaW5kZXggZmZiODA5Ni4uOTQ5NmM3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklE
QkNvbm5lY3Rpb25Ub0NsaWVudC5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJJREJDb25uZWN0aW9uVG9DbGll
bnRfaAotI2RlZmluZSBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRfaAorI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApAQCAtNzYsNiArNzUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSBm
aW5hbDsKICAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oY29uc3QgV2ViQ29yZTo6SURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklE
QkVycm9yJikgZmluYWw7CisgICAgdm9pZCBkaWRDbG9zZUZyb21TZXJ2ZXIoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpJREJF
cnJvciYpIGZpbmFsOwogICAgIHZvaWQgbm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29uc3Qg
V2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0
X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikgZmluYWw7CiAKICAgICB2b2lkIGRp
ZEdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRhdGFiYXNlTmFtZXMpIGZpbmFsOwpAQCAtMTA2LDYgKzEwNiw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQodWludDY0X3QgZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVu
dCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICB2b2lkIG9wZW5E
QlJlcXVlc3RDYW5jZWxsZWQoY29uc3QgV2ViQ29yZTo6SURCUmVxdWVzdERhdGEmKTsKKyAgICB2
b2lkIGNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9u
SWRlbnRpZmllcik7CiAKICAgICB2b2lkIGdldEFsbERhdGFiYXNlTmFtZXModWludDY0X3Qgc2Vy
dmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgdG9wT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdP
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCkBAIC0xMjcsNCArMTI4LDMgQEAgcHJpdmF0
ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0jZW5kaWYgLy8gV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlv
blRvQ2xpZW50Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQubWVzc2FnZXMuaW4KaW5kZXggZmY5Mjgw
OC4uY2MzODUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGll
bnQubWVzc2FnZXMuaW4KQEAgLTQ1LDYgKzQ1LDcgQEAgbWVzc2FnZXMgLT4gV2ViSURCQ29ubmVj
dGlvblRvQ2xpZW50IHsKICAgICBBYm9ydE9wZW5BbmRVcGdyYWRlTmVlZGVkKHVpbnQ2NF90IGRh
dGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmll
ciB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIERpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQo
dWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SURCUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICBPcGVuREJSZXF1ZXN0Q2FuY2Vs
bGVkKFdlYkNvcmU6OklEQlJlcXVlc3REYXRhIHJlcXVlc3REYXRhKTsKKyAgICBDb25maXJtRGlk
Q2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwog
CiAgICAgR2V0QWxsRGF0YWJhc2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRp
Zmllciwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSB0b3BPcmlnaW4sIHN0cnVj
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgb3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2Fs
bGJhY2tJRCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2
ZXIuY3BwCmluZGV4IDUwN2YyNjYuLjhmOWRjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9X
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0xODYsNiArMTg2LDExIEBAIHZvaWQgV2Vi
SURCQ29ubmVjdGlvblRvU2VydmVyOjpvcGVuREJSZXF1ZXN0Q2FuY2VsbGVkKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1CiAgICAgc2VuZChNZXNzYWdlczo6V2ViSURCQ29ubmVjdGlvblRvQ2xp
ZW50OjpPcGVuREJSZXF1ZXN0Q2FuY2VsbGVkKHJlcXVlc3REYXRhKSk7CiB9CiAKK3ZvaWQgV2Vi
SURCQ29ubmVjdGlvblRvU2VydmVyOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2NF90
IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
SURCQ29ubmVjdGlvblRvQ2xpZW50OjpDb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKGRhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIpKTsKK30KKwogdm9pZCBXZWJJREJDb25uZWN0aW9uVG9TZXJ2
ZXI6OmdldEFsbERhdGFiYXNlTmFtZXMoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiB0b3BPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09y
aWdpbiwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJD
b25uZWN0aW9uVG9DbGllbnQ6OkdldEFsbERhdGFiYXNlTmFtZXMobV9pZGVudGlmaWVyLCB0b3BP
cmlnaW4sIG9wZW5pbmdPcmlnaW4sIGNhbGxiYWNrSUQpKTsKQEAgLTI4MiwxMSArMjg3LDE2IEBA
IHZvaWQgV2ViSURCQ29ubmVjdGlvblRvU2VydmVyOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVp
bnQ2NF90IHVuaXF1ZURhdGFiYXNlQ29uCiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXItPmZpcmVW
ZXJzaW9uQ2hhbmdlRXZlbnQodW5pcXVlRGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgcmVx
dWVzdElkZW50aWZpZXIsIHJlcXVlc3RlZFZlcnNpb24pOwogfQogCi12b2lkIFdlYklEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SURCRXJyb3ImIGVy
cm9yKQordm9pZCBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlkU3RhcnRU
cmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGVycm9yKTsKIH0KIAordm9pZCBXZWJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFz
ZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgbV9j
b25uZWN0aW9uVG9TZXJ2ZXItPmRpZENsb3NlRnJvbVNlcnZlcihkYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyLCBlcnJvcik7Cit9CisKIHZvaWQgV2ViSURCQ29ubmVjdGlvblRvU2VydmVyOjpu
b3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJl
cXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9u
KQogewogICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5ub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tl
ZChyZXF1ZXN0SWRlbnRpZmllciwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29u
bmVjdGlvblRvU2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmgKaW5kZXggMTE2NGI1Ni4uMDVmMzk2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhl
ZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaApAQCAt
MjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgV2ViSURCQ29ubmVjdGlvblRvU2VydmVyX2gKLSNkZWZpbmUgV2ViSURCQ29ubmVj
dGlvblRvU2VydmVyX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKQEAgLTY2LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWJvcnRPcGVuQW5kVXBn
cmFkZU5lZWRlZCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgZmlu
YWw7CiAgICAgdm9pZCBkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmll
ciYgcmVxdWVzdElkZW50aWZpZXIpIGZpbmFsOwogICAgIHZvaWQgb3BlbkRCUmVxdWVzdENhbmNl
bGxlZChjb25zdCBXZWJDb3JlOjpJREJSZXF1ZXN0RGF0YSYpIGZpbmFsOworICAgIHZvaWQgY29u
ZmlybURpZENsb3NlRnJvbVNlcnZlcih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlm
aWVyKSBmaW5hbDsKIAogICAgIHZvaWQgZ2V0QWxsRGF0YWJhc2VOYW1lcyhjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmIHRvcE9yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lEKSBmaW5hbDsKIApA
QCAtOTEsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRJdGVyYXRlQ3Vyc29yKGNvbnN0
IFdlYkNvcmU6OklEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQodWludDY0X3QgdW5pcXVlRGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qg
cmVxdWVzdGVkVmVyc2lvbik7CiAgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKGNvbnN0IFdl
YkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpJREJFcnJvciYpOworICAgIHZvaWQgZGlkQ2xvc2VGcm9tU2VydmVyKHVpbnQ2
NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQkVycm9y
Jik7CiAgICAgdm9pZCBub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChjb25zdCBXZWJDb3JlOjpJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJz
aW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKTsKICAgICB2b2lkIGRpZEdldEFsbERhdGFiYXNlTmFt
ZXModWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFiYXNlTmFt
ZXMpOwogCkBAIC0xMDksNCArMTEwLDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCmluZGV4IDY1ZWMxMDNjLi4yZDViZTI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIu
bWVzc2FnZXMuaW4KQEAgLTQyLDYgKzQyLDcgQEAgbWVzc2FnZXMgLT4gV2ViSURCQ29ubmVjdGlv
blRvU2VydmVyIHsKIAogICAgIEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWludDY0X3QgZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyIHJl
cXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQogICAgIERpZFN0YXJ0
VHJhbnNhY3Rpb24oV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgV2ViQ29yZTo6SURCRXJyb3IgZXJyb3IpCisgICAgRGlkQ2xvc2VGcm9tU2VydmVy
KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIFdlYkNvcmU6OklEQkVycm9y
IGVycm9yKSBmaW5hbDsKICAgICBOb3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChXZWJDb3JlOjpJ
REJSZXNvdXJjZUlkZW50aWZpZXIgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNp
b24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiAKICAgICBEaWRHZXRBbGxEYXRhYmFzZU5hbWVzKHVp
bnQ2NF90IGNhbGxiYWNrSUQsIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNlTmFtZXMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>