<?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>100425</bug_id>
          
          <creation_ts>2012-10-25 15:17:03 -0700</creation_ts>
          <short_desc>IndexedDB: add methods to support id-based backend APIs</short_desc>
          <delta_ts>2012-11-01 11:07:59 -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>528+ (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>100426</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jsbell</cc>
    
    <cc>peter+ews</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>751265</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-25 15:17:03 -0700</bug_when>
    <thetext>This is the first of a two-step landing.

First, all IDB*BackendInterface methods that take String-based references to objectStores and indexes will get new methods along side the old ones, that take int64_t-based references instead. Then after cleaning up the other ports (namely, chromium) we&apos;ll fix up the frontend to proxy these new methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751268</commentid>
    <comment_count>1</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-25 15:19:03 -0700</bug_when>
    <thetext>the bug for the followup work is bug 100426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751318</commentid>
    <comment_count>2</comment_count>
      <attachid>170759</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-25 16:05:56 -0700</bug_when>
    <thetext>Created attachment 170759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751322</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 16:08:25 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751366</commentid>
    <comment_count>4</comment_count>
      <attachid>170759</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-25 17:25:56 -0700</bug_when>
    <thetext>Comment on attachment 170759
Patch

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

First batch of comments.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:198
&gt; +        for (IDBDatabaseMetadata::ObjectStoreMap::const_iterator it = m_metadata.objectStores.begin(); it != m_metadata.objectStores.end(); ++it) {

Maybe rename containsObjectStore to findObjectStore that returns an ID or InvalidID, and then this can be a findObjectStore() followed by a remove()

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:243
&gt;  void IDBDatabaseBackendImpl::deleteObjectStoreInternal(ScriptExecutionContext*, PassRefPtr&lt;IDBDatabaseBackendImpl&gt; database, PassRefPtr&lt;IDBObjectStoreBackendImpl&gt; objectStore, PassRefPtr&lt;IDBTransactionBackendImpl&gt; transaction)

This could change to take objectStoreId instead of objectStore.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:434
&gt; +PassRefPtr&lt;IDBTransactionBackendInterface&gt; IDBDatabaseBackendImpl::transaction(unsigned short mode)

Given that we&apos;re going to need the &quot;scope&quot; of the transaction for correctly scheduling, I don&apos;t think removing it here is a good idea, even though it&apos;s currently unused. Converting to a list of IDs would be okay.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h:73
&gt; +    int64_t getObjectStoreId(const String&amp; name);

Going away, but this could be private right?

&gt; Source/WebCore/Modules/indexeddb/IDBMetadata.h:-41
&gt; -struct IDBObjectStoreMetadata;

Why reorder?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:453
&gt;      ASSERT(!indexBackend != !ec); // If we didn&apos;t get an index, we should have gotten an exception code. And vice versa.

Given above change, this can be ASSERT(!ec &amp;&amp; indexBackend) right?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:287
&gt; +    // FIXME: We manually convert each name to an indexId, even if the name has already been deleted, because we have to remove exactly that many preemptive events, but this will go away when https://bugs.webkit.org/show_bug.cgi?id=100426 lands.

Make sure to include a test with 100426 that tests put-record/delete-index/create-index-with-same-name-different-keypath

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:500
&gt; +

Extra blank line.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:-524
&gt; -        ExceptionCode unused; 

I&apos;ve been waiting for an excuse to remove that space!

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:47
&gt; +PassRefPtr&lt;IDBTransaction&gt; IDBTransaction::create(ScriptExecutionContext* context, PassRefPtr&lt;IDBTransactionBackendInterface&gt; backend, PassRefPtr&lt;DOMStringList&gt; objectStoreNames, IDBTransaction::Mode mode, IDBDatabase* db)

In order to clean up the binding code it would be nice to remove uses of DOMStringList where possible in favor of Vector&lt;String&gt;. Can we avoid adding new uses of DOMStringList and have callers use Vector&lt;String&gt; instead? (DOMStringList already has a cast operator for this.)

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:164
&gt;      ASSERT(!objectStoreBackend != !ec); // If we didn&apos;t get a store, we should have gotten an exception code. And vice versa.

Given above, this can be ASSERT(!ec &amp;&amp; objectStoreBackend) right?

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:148
&gt; +    RefPtr&lt;DOMStringList&gt; m_objectStoreNames;

Per above, would be nice to avoid DOMStringList in favor of Vector&lt;String&gt;

It seems like this can eventually go away in favor of Set&lt;int64_t&gt; of IDs in scope use the Map&lt;String, int64_t&gt; in the database metadata?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752153</commentid>
    <comment_count>5</comment_count>
      <attachid>170759</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-26 10:16:20 -0700</bug_when>
    <thetext>Comment on attachment 170759
Patch

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

Made it to the end - only a few nits.

&gt; Source/WebCore/ChangeLog:32
&gt; +        (getIndexId/getIndexIds/getObjectStoreId) that will go away with

I personally find it helpful to annotate temporary code with FIXMEs so the redundancy is more obvious when reading it. Plus there&apos;s a warm fuzzy feeling when you get to delete it.

&gt; Source/WebKit/chromium/src/IDBObjectStoreBackendProxy.cpp:175
&gt;  void IDBObjectStoreBackendProxy::deleteIndex(const String&amp; name, IDBTransactionBackendInterface* transaction, ExceptionCode&amp; ec)

Add blank line above.

&gt; Source/WebKit/chromium/src/IDBTransactionBackendProxy.cpp:64
&gt; +PassRefPtr&lt;WebCore::IDBObjectStoreBackendInterface&gt; IDBTransactionBackendProxy::objectStore(int64_t indexId, ExceptionCode&amp; ec)

Add blank line above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752417</commentid>
    <comment_count>6</comment_count>
      <attachid>171013</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-26 14:34:39 -0700</bug_when>
    <thetext>Created attachment 171013
Patch

Address review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752419</commentid>
    <comment_count>7</comment_count>
      <attachid>170759</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-26 14:35:04 -0700</bug_when>
    <thetext>Comment on attachment 170759
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:243
&gt;&gt;  void IDBDatabaseBackendImpl::deleteObjectStoreInternal(ScriptExecutionContext*, PassRefPtr&lt;IDBDatabaseBackendImpl&gt; database, PassRefPtr&lt;IDBObjectStoreBackendImpl&gt; objectStore, PassRefPtr&lt;IDBTransactionBackendImpl&gt; transaction)
&gt; 
&gt; This could change to take objectStoreId instead of objectStore.

In the interest of not expanding the scope of this any further, I&apos;ll catch that in the next patch!

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:434
&gt;&gt; +PassRefPtr&lt;IDBTransactionBackendInterface&gt; IDBDatabaseBackendImpl::transaction(unsigned short mode)
&gt; 
&gt; Given that we&apos;re going to need the &quot;scope&quot; of the transaction for correctly scheduling, I don&apos;t think removing it here is a good idea, even though it&apos;s currently unused. Converting to a list of IDs would be okay.

whoops, forgot about that. Put it back.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h:73
&gt;&gt; +    int64_t getObjectStoreId(const String&amp; name);
&gt; 
&gt; Going away, but this could be private right?

nope, gets called by the transaction backend sometimes.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBMetadata.h:-41
&gt;&gt; -struct IDBObjectStoreMetadata;
&gt; 
&gt; Why reorder?

Because the hashmaps were dependent on pre-declared structs - basically I couldn&apos;t implement the containsObjectStore/containsIndex without reordering

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:47
&gt;&gt; +PassRefPtr&lt;IDBTransaction&gt; IDBTransaction::create(ScriptExecutionContext* context, PassRefPtr&lt;IDBTransactionBackendInterface&gt; backend, PassRefPtr&lt;DOMStringList&gt; objectStoreNames, IDBTransaction::Mode mode, IDBDatabase* db)
&gt; 
&gt; In order to clean up the binding code it would be nice to remove uses of DOMStringList where possible in favor of Vector&lt;String&gt;. Can we avoid adding new uses of DOMStringList and have callers use Vector&lt;String&gt; instead? (DOMStringList already has a cast operator for this.)

Good point, done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:148
&gt;&gt; +    RefPtr&lt;DOMStringList&gt; m_objectStoreNames;
&gt; 
&gt; Per above, would be nice to avoid DOMStringList in favor of Vector&lt;String&gt;
&gt; 
&gt; It seems like this can eventually go away in favor of Set&lt;int64_t&gt; of IDs in scope use the Map&lt;String, int64_t&gt; in the database metadata?

yes. using Vector&lt;String&gt; for now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753885</commentid>
    <comment_count>8</comment_count>
      <attachid>171339</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-29 17:09:42 -0700</bug_when>
    <thetext>Created attachment 171339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753896</commentid>
    <comment_count>9</comment_count>
      <attachid>171346</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-29 17:32:09 -0700</bug_when>
    <thetext>Created attachment 171346
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753930</commentid>
    <comment_count>10</comment_count>
      <attachid>171346</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-29 18:43:47 -0700</bug_when>
    <thetext>Comment on attachment 171346
Patch

Attachment 171346 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14620637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754479</commentid>
    <comment_count>11</comment_count>
      <attachid>171477</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-30 10:16:57 -0700</bug_when>
    <thetext>Created attachment 171477
Patch

fix &apos;long long&apos; typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754521</commentid>
    <comment_count>12</comment_count>
      <attachid>171477</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-30 11:15:11 -0700</bug_when>
    <thetext>Comment on attachment 171477
Patch

Attachment 171477 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14620911</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754808</commentid>
    <comment_count>13</comment_count>
      <attachid>171554</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-30 17:09:41 -0700</bug_when>
    <thetext>Created attachment 171554
Patch

unbreak chromium and android</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754809</commentid>
    <comment_count>14</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-30 17:10:43 -0700</bug_when>
    <thetext>ok, this one should be good to go - jsbell@ - anything else to add before I r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754814</commentid>
    <comment_count>15</comment_count>
      <attachid>171554</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-30 17:15:51 -0700</bug_when>
    <thetext>Comment on attachment 171554
Patch

still lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755409</commentid>
    <comment_count>16</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-31 10:06:09 -0700</bug_when>
    <thetext>abarth@ - ok, this is a different patch (unrelated to the DOMRequest stuff) - the key here on the chromium side is that we&apos;re just adding parallel methods to what already exists, substituting &apos;const String&amp;&apos; for &apos;int64_t&apos; or &apos;long long&apos; where appropriate, as well as dropping a few unused parameters while we&apos;re there.

tony@ - do you mind reviewing the IDB side of things? it&apos;s just more refactoring/cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755448</commentid>
    <comment_count>17</comment_count>
      <attachid>171554</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 10:37:12 -0700</bug_when>
    <thetext>Comment on attachment 171554
Patch

API change LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755452</commentid>
    <comment_count>18</comment_count>
      <attachid>171554</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-31 10:44:26 -0700</bug_when>
    <thetext>Comment on attachment 171554
Patch

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

LGTM, just some style nits.

&gt; Source/WebCore/Modules/indexeddb/IDBMetadata.h:42
&gt; +    IDBIndexMetadata() { }

Nit: Do you want this constructor to initialized the int64_ts and bools?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:203
&gt; +    for (size_t i = 0; i &lt; indexIds.size(); i++)

Nit: ++i

&gt; Source/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp:118
&gt; +    ASSERT(webIndexIds.size() == webIndexKeys.size());
&gt; +    Vector&lt;int64_t&gt; indexIds(webIndexIds.size());
&gt; +    Vector&lt;IDBObjectStoreBackendInterface::IndexKeys&gt; indexKeys(webIndexKeys.size());
&gt; +
&gt; +    for (size_t i = 0; i &lt; webIndexIds.size(); ++i) {
&gt; +        indexIds[i] = webIndexIds[i];

Can we make a helper function to share this code with put()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755459</commentid>
    <comment_count>19</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-31 10:54:51 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 171554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171554&amp;action=review
&gt; 
&gt; LGTM, just some style nits.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBMetadata.h:42
&gt; &gt; +    IDBIndexMetadata() { }
&gt; 
&gt; Nit: Do you want this constructor to initialized the int64_ts and bools?
&gt; 
Nah - the only reason for the constructor is because HashMap requires it - and if anything I&apos;ve once or twice used the &apos;uninitializedness&apos; of the values to detect bugs during development.

&gt; 
&gt; Can we make a helper function to share this code with put()?

Sure, I&apos;ll do that in the &quot;cleanup&quot; half of this overall refactoring - the one that removes the &apos;const String&amp;&apos; methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755472</commentid>
    <comment_count>20</comment_count>
      <attachid>171690</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-31 11:17:14 -0700</bug_when>
    <thetext>Created attachment 171690
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755777</commentid>
    <comment_count>21</comment_count>
      <attachid>171690</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 18:22:06 -0700</bug_when>
    <thetext>Comment on attachment 171690
Patch for landing

Clearing flags on attachment: 171690

Committed r133107: &lt;http://trac.webkit.org/changeset/133107&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755778</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 18:22:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755802</commentid>
    <comment_count>23</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-31 19:08:52 -0700</bug_when>
    <thetext>Reverted r133107 for reason:

Broke compile on Chromium Win

Committed r133112: &lt;http://trac.webkit.org/changeset/133112&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756430</commentid>
    <comment_count>24</comment_count>
      <attachid>171891</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-01 10:39:49 -0700</bug_when>
    <thetext>Created attachment 171891
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756462</commentid>
    <comment_count>25</comment_count>
      <attachid>171891</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 11:07:54 -0700</bug_when>
    <thetext>Comment on attachment 171891
Patch for landing

Clearing flags on attachment: 171891

Committed r133195: &lt;http://trac.webkit.org/changeset/133195&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756463</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 11:07:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170759</attachid>
            <date>2012-10-25 16:05:56 -0700</date>
            <delta_ts>2012-10-26 14:35:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121025160429.patch</filename>
            <type>text/plain</type>
            <size>98183</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlOTI2ODc5YzNhYjVh
ZTdlZjUyYzE2NTZkNTBlOWVkZjgwMzcyMC4uZGVhMDlkYzMzM2FiMWRiZWExNzdhNzQ0ZjdhZjcz
OGZkNWVkMDU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI1ICBZdXJ5IFNlbWlraGF0c2t5ICA8
eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1lbW9yeSBpbnN0cnVtZW50YXRpb246IGFk
ZCByZXBvcnRNZW1vcnlVc2FnZSB0byBJbWFnZU9ic2VydmVyIGludGVyZmFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBmMGVkYzViNmM1OTM5NzBlNzJkZThjMjIyMDI0OTMwZDgyOGUz
YWE1Li4yMDk1MTc0ZGZlOTUxMjVlZjIxNWU0NTE5ZmZlY2NjZjZhNGQ1ZTAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTEwLTI1ICBBbGVjIEZsZXR0
ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGFkZCBtZXRo
b2RzIHRvIHN1cHBvcnQgaWQtYmFzZWQgYmFja2VuZCBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBQcm94eSBhbmQgV2ViSURCKiBz
dXBwb3J0IGZvciBuZXcgaW50NjRfdC1iYXNlZCBtZXRob2RzLgorCisgICAgICAgICogcHVibGlj
L1dlYklEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjpkZWxl
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbik6CisgICAgICAgICogcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJP
YmplY3RTdG9yZTo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0
U3RvcmU6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0
b3JlOjppbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpkZWxldGVJ
bmRleCk6CisgICAgICAgICogcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lE
QkRhdGFiYXNlQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRGF0YWJhc2VC
YWNrZW5kUHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbik6CisgICAg
ICAgICogc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChJREJEYXRhYmFz
ZUJhY2tlbmRQcm94eSk6CisgICAgICAgICogc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dCk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eTo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjppbmRleCk6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0
b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleCk6CisgICAgICAgICogc3JjL0lEQk9iamVjdFN0
b3JlQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSk6
CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0b3JlKToKKyAgICAg
ICAgKiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKElEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5KToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6b3BlcmF0b3IgSURCRGF0YWJhc2VNZXRhZGF0YSk6
CisgICAgICAgICogc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQlRyYW5zYWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmg6CisgICAgICAgICogdGVz
dHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHA6CisKIDIwMTItMTAtMjIgIE1pa2hhaWwgTmFn
YW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEFkZCBz
dXBwb3J0TXVsdGlwbGVXaW5kb3dzIHNldHRpbmcsIG5lZWRlZCBmb3IgQW5kcm9pZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDJj
OTFkNzJmN2VkZmMyNmIyYzQyMzM2Yzc1OWQ4ZTRmY2E1OWEwODguLjA4NGJkYjgzZmExN2NmMzEw
MTBiN2MxYjBiYmM0ZDZkYzYxMjEyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsK
ICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG9iamVj
dFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+
YXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAg
ICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMTQyLDcgKzE0Miw3
IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5
UGF0aChrZXlQYXRoU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAobV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICBpZiAobV9tZXRhZGF0YS5jb250YWluc09iamVj
dFN0b3JlKG5hbWUpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNU
UkFJTlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNzAsNyArMTcwLDcgQEAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY28KIAogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0
YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7CiAgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWV0YWRh
dGEsIG9iamVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobmFtZSwgbWV0YWRh
dGEpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRh
dGEpOwogICAgICsrbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkOwogCiAgICAgbV92ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7
CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMobmFt
ZSkpIHsKKyAgICBpZiAoIW1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgewog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NSw3ICsxOTUsMTIgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsIG1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoIWVjKSB7CiAgICAgICAgIG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7Ci0gICAg
ICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKKyAgICAgICAgZm9yIChJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5h
bWUpIHsKKyAgICAgICAgICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUoaXQt
PmtleSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiB9CiAKQEAgLTI0MSw2ICsyNDYsMTMgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250
YWluc09iamVjdFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBu
ZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJv
bm91c2x5LiBPcGVyYXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFu
c2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBh
cyB0aGUKICAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCkBAIC0y
NTAsNyArMjYyLDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRy
YW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgQVNTRVJUKGVj
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9u
QmFja2VuZCwgbW9kZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5k
LCBzdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKICAgICB0cmFuc2FjdGlvbkJhY2tlbmQtPnNldENh
bGxiYWNrcyh0cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVh
c2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggYzM2ZDhjMzI5YTBlZmY4YjZiYmU1
ZTFkY2FiMTM4MTVlZGU0YTE1My4uOWVjNzNjODIxMzFkM2MyMmJiMWE2YjZlMmYxOTdlYjI1MDVl
MWY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE2NywxMyArMTY3LDEzIEBAIElEQkRh
dGFiYXNlTWV0YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAog
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KE4pLmluZGV4ZXMgdXAgdG8gZGF0ZSByYXRoZXIgdGhhbiByZWdlbmVyYXRpbmcg
dGhpcyBldmVyeSB0aW1lLgogICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRh
ZGF0YSk7CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29i
amVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOworICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT52YWx1ZS0+aWQo
KSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAgQVNT
RVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOwogCiAgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIElEQk9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUlu
ZGV4SWQpKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKQEAgLTE5
Myw3ICsxOTMsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0UwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAg
IG1fb2JqZWN0U3RvcmVzLnNldChpZCwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RT
dG9yZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTIwNywxNyArMjA3LDI3IEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShp
bnQ2NF90IGlkKQogewotICAgIHJldHVybiBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CisgICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
K2ludDY0X3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZChjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUp
KTsKKyAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0
U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0
X3QgaWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhp
ZCkpOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhp
czsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBt
X29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCkBAIC0yMjcsNyAr
MjM3LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKKyAgICBtX29iamVjdFN0b3Jl
cy5yZW1vdmUoaWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9i
amVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24pCkBAIC00MjEsMjAgKzQzMSwxOCBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQogICAgIEFTU0VSVChtX3BlbmRpbmdP
cGVuQ2FsbHMuaXNFbXB0eSgpKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0cmlu
Z0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVOYW1l
cy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2JqZWN0U3RvcmVOYW1lcywgbW9kZSwg
dGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG1vZGUsIHRoaXMpOwogICAgIG1f
dHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0
aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3Qq
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICByZXR1cm4gdHJh
bnNhY3Rpb24obW9kZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTYxMSwyMSArNjE5LDIxIEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3JlcygpCiAgICAgVmVjdG9yPElEQk9iamVjdFN0
b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9y
ZXMobV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0
b3Jlcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jl
c1tpXS5uYW1lLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVzW2ldKSk7CisgICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZXNbaV0u
aWQsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNb
aV0pKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9y
ZUZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gcHJwT2JqZWN0U3RvcmUpCiB7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlID0gcHJwT2JqZWN0U3RvcmU7Ci0gICAgQVNTRVJUKGRhdGFiYXNlLT5t
X29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+bmFtZSgpKSk7Ci0gICAgZGF0YWJh
c2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZS0+bmFtZSgpKTsKKyAgICBBU1NF
UlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5pZCgpKSk7
CisgICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZS0+aWQoKSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmVQdHIgPSBvYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+bmFtZSgpKSk7Ci0gICAgZGF0YWJhc2UtPm1fb2Jq
ZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZVB0ci0+bmFtZSgpLCBvYmplY3RTdG9yZVB0cik7Cisg
ICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVQ
dHItPmlkKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jl
UHRyLT5pZCgpLCBvYmplY3RTdG9yZVB0cik7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVy
c2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXgg
MTFhNjlkMGJmZGE2NmIwNjIwMWQzOTYzYzBlZTE0NGFiODhlMzVlOC4uNzU5MTlkNmYyYjE0Njk5
YWZkMmZhODZhZmQ1ZWM3MTdkNjM4NmVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNjIsMTIg
KzYyLDE1IEBAIHB1YmxpYzoKICAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKICAg
ICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmpl
Y3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGRlbGV0ZU9iamVjdFN0b3JlKGdldE9iamVjdFN0b3Jl
SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9i
amVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbih1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUoaW50NjRf
dCBpZCk7CisgICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSk7
CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQogICAgIHZv
aWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKQEAgLTEwMCw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRo
aXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3RvcnkncyBsaWZl
dGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgY29u
c2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4g
bV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFw
PGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+IE9iamVjdFN0b3Jl
TWFwOwogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAgT3duUHRyPElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNGNkMDg0NWI0MzZiMjc0ODdiMWRjMTU3YTE4ODE3
ZDFmYmUxN2M0OS4uODRmMDU2ZDk1MTBiZTMwOGE0ZDBkYWUyMzRiMjhjOWRjNzFlYzM0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU2LDggKzU2LDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShp
bnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBzdG9yZU5h
bWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KHVuc2lnbmVkIHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0OTA5MTYy
M2Q4ZGUyM2Y5YTg3NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4YjgxM2E3YmEx
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAt
NTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3QgaWQoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktl
eVJhbmdlKj4oMCksIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlD
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2Uq
PigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0
LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgp
LCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcm
IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAw
NzYxZjA2ODFiYmM5ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1MmZjNGI4
ZmE4MjI4YTRlZjg4YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMjgs
NyArMjgsNiBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaAppbmRleCA3NjhlYmJhZjRhNjM2MTk5YjlkYTAwMjY3
ZTJjMGQ0NzZkYzliODBhLi5mM2RhZGFlNzRkOGMxMjA3MjQzNjJmMThiNTYyM2U4ZTRmMTVhOTlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgK
QEAgLTM4LDM3ICszOCwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOwotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci0KLXN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhIHsKLSAgICAvLyBGSVhNRTogVGhlc2UgY2FuIHByb2JhYmx5IGJl
IGNvbGxhcHNlZCBpbnRvIDAuCi0gICAgZW51bSB7Ci0gICAgICAgIE5vSW50VmVyc2lvbiA9IC0x
LAotICAgICAgICBEZWZhdWx0SW50VmVyc2lvbiA9IDAKLSAgICB9OwotCi0gICAgSURCRGF0YWJh
c2VNZXRhZGF0YSgpCi0gICAgICAgIDogaW50VmVyc2lvbihOb0ludFZlcnNpb24pCi0gICAgewot
ICAgIH0KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRf
dCBpZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3Qg
bWF4T2JqZWN0U3RvcmVJZCkKK3N0cnVjdCBJREJJbmRleE1ldGFkYXRhIHsKKyAgICBJREJJbmRl
eE1ldGFkYXRhKCkgeyB9CisgICAgSURCSW5kZXhNZXRhZGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGludDY0X3QgaWQsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnkpCiAgICAgICAgIDogbmFtZShuYW1lKQogICAgICAgICAsIGlkKGlkKQotICAg
ICAgICAsIHZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBpbnRWZXJzaW9uKGludFZlcnNpb24p
Ci0gICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RTdG9yZUlkKQotICAgIHsKLSAg
ICB9Ci0KKyAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgpCisgICAgICAgICwgdW5pcXVlKHVuaXF1
ZSkKKyAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50cnkpIHsgfQogICAgIFN0cmluZyBuYW1l
OwogICAgIGludDY0X3QgaWQ7Ci0gICAgU3RyaW5nIHZlcnNpb247Ci0gICAgaW50NjRfdCBpbnRW
ZXJzaW9uOwotICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKLQotICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IE9iamVjdFN0b3JlTWFwOwotICAg
IE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKyAgICBJREJLZXlQYXRoIGtleVBhdGg7Cisg
ICAgYm9vbCB1bmlxdWU7CisgICAgYm9vbCBtdWx0aUVudHJ5OwogfTsKIAogc3RydWN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgewpAQCAtODcsMjMgKzY5LDU3IEBAIHN0cnVjdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIHsKICAgICBib29sIGF1dG9JbmNyZW1lbnQ7CiAgICAgaW50NjRfdCBtYXhJ
bmRleElkOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCSW5kZXhNZXRhZGF0YT4g
SW5kZXhNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+
IEluZGV4TWFwOwogICAgIEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5zSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRleE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiB9OwogCi1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5kZXhN
ZXRhZGF0YSgpIHsgfQotICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBp
bnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5KQorc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1FOiBU
aGVzZSBjYW4gcHJvYmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAgICAg
ICAgTm9JbnRWZXJzaW9uID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAorICAg
IH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YT4gT2JqZWN0U3RvcmVNYXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAgICAg
OiBpbnRWZXJzaW9uKE5vSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQogICAg
ICAgICA6IG5hbWUobmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRoKGtl
eVBhdGgpCi0gICAgICAgICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5KG11
bHRpRW50cnkpIHsgfQorICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBpbnRW
ZXJzaW9uKGludFZlcnNpb24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RT
dG9yZUlkKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChPYmplY3RTdG9yZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0
U3RvcmVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0g
bmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaW50NjRfdCBpZDsK
LSAgICBJREJLZXlQYXRoIGtleVBhdGg7Ci0gICAgYm9vbCB1bmlxdWU7Ci0gICAgYm9vbCBtdWx0
aUVudHJ5OworICAgIFN0cmluZyB2ZXJzaW9uOworICAgIGludDY0X3QgaW50VmVyc2lvbjsKKyAg
ICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7CisKKyAgICBPYmplY3RTdG9yZU1hcCBvYmplY3RT
dG9yZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggZmM2NTczYTE4YTI4NmVjMGE2MjVjZjZhNTVkZjY1
MmUxYWQ3YWJhMy4uMTYxNDUzMzNhZWU5NDIxYmJhYjEzMTM1YjgwNjJkYmM0ZjU1NGIyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcApAQCAtNjYsNyArNjYsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVj
dFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
OjppbmRleE5hbWVzIik7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMgPSBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFt
ZXMtPmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT52YWx1
ZS5uYW1lKTsKICAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIGluZGV4TmFtZXMu
cmVsZWFzZSgpOwogfQpAQCAtMjA5LDcgKzIwOSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwogICAgICAgICBnZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsKLSAgICAgICAg
aW5kZXhOYW1lcy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0
LT52YWx1ZS5uYW1lKTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAg
ICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtMzgy
LDcgKzM4Miw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgICAgIGVjID0gTkFUSVZF
X1RZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKG1fbWV0YWRhdGEu
aW5kZXhlcy5jb250YWlucyhuYW1lKSkgeworICAgIGlmIChtX21ldGFkYXRhLmNvbnRhaW5zSW5k
ZXgobmFtZSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlO
VF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQwOSw3ICs0MDksNyBAQCBQYXNz
UmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dAogICAgIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEobmFtZSwg
aW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKICAgICBSZWZQdHI8SURCSW5k
ZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShtZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVh
c2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9pbmRleE1hcC5zZXQobmFt
ZSwgaW5kZXgpOwotICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5zZXQobmFtZSwgbWV0YWRhdGEpOwor
ICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5zZXQoaW5kZXhJZCwgbWV0YWRhdGEpOwogCiAgICAgQVNT
RVJUKCFlYyk7CiAgICAgaWYgKGVjKQpAQCAtNDQ0LDE1ICs0NDQsMjYgQEAgUGFzc1JlZlB0cjxJ
REJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMKICAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKIAorICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAg
ICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGlu
ZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1fbWV0YWRhdGEuaW5k
ZXhlcy5maW5kKG5hbWUpOwotICAgIEFTU0VSVChtZGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5l
bmQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgwKTsKKyAg
ICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpIHsKKyAg
ICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOwogCi0gICAgUmVm
UHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4
QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0
cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKCppbmRleE1ldGFkYXRhLCBpbmRl
eEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2lu
ZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0K
QEAgLTQ2NywyMSArNDc4LDIwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIW1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSkgewor
ICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKSB7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoIWVjKSB7CisgICAgICAgIEFTU0VSVChtX21ldGFk
YXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpOwogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFw
LmVuZCgpKSB7CisgICAgICAgICAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1
ZS0+aWQoKSk7CiAgICAgICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7CiAgICAgICAg
ICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkpOwotICAgICAgICBtX21ldGFkYXRh
LmluZGV4ZXMucmVtb3ZlKG5hbWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcAppbmRleCAyM2EzMzY3ZjRjM2I1NjM4MzZlNTVhYzQ5OGQ3NTc2MWQyMDEwNDQ2Li41NTky
OGM2NDhmMDQzNzVhMDU3NWQ4MDQ4Y2ExYjE2NmEwODhjZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZSh3aXJlRGF0YSkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBA
IC0xMTgsMTYgKzExOCwyMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdp
dGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3Rv
cjxTdHJpbmc+ID4gbmV3SW5kZXhOYW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihp
bmRleE5hbWVzKSk7CisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0
b3I8SW5kZXhLZXlzPiA+IG5ld0luZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhL
ZXlzPihpbmRleEtleXMpKTsKIAogICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsK
IAogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBu
ZXdJbmRleE5hbWVzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbiwgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9u
Q29kZSYpCit7CisgICAgcmV0dXJuIHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBD
YWxsYmFja3MsIHRyYW5zYWN0aW9uUHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhL
ZXlzKTsKK30KIG5hbWVzcGFjZSB7CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0x
NTcsOCArMTYxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tp
bmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNv
bnN0CisgICAgYm9vbCB3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7
CisgICAgICAgIGludDY0X3QgaW5kZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0
aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjgsOCArMTczLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZh
dGU6CiAKICAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5n
U3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkz
LDEzICsxOTYsMTMgQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdy
aXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4g
aW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRl
eFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3Jp
dGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4
V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMu
c2l6ZSgpID09IGluZGV4S2V5cy5zaXplKCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkg
PT0gaW5kZXhLZXlzLnNpemUoKSk7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlN
YXAuYWRkKGluZGV4TmFtZXNbaV0sIGluZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9y
IChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmpl
Y3RTdG9yZS0+aXRlckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4
ZXNFbmQoKTsgKytpdCkgewogCkBAIC0yMjgsNyArMjMxLDcgQEAgc3RhdGljIGJvb2wgbWFrZUlu
ZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uLAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRl
eEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElE
QktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnNldEluZGV4S2V5cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkgPSBwcnBQcmltYXJ5S2V5OwpAQCAtMjQzLDcgKzI0Niw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjCiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsK
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFu
c2FjdGlvbiwgdGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywg
JmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRl
cnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhL
ZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTog
TmVlZCB0byBkZWFsIHdpdGggZXJyb3JNZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25s
eSBmYWlscyBvbiB1bmlxdWVuZXNzIGNvbnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2Fj
dGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUiwgIkR1cGxpY2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmpl
Y3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CkBAIC0yNTEsNDYgKzI1NCw2OCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktl
eT4gcHJwUHJpbWFyeUtleSwgYwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdy
aXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0g
aW5kZXhXcml0ZXJzW2ldLmdldCgpOwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEu
aWQsIG1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAg
ICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5n
ZXQoKSwgKmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQorewor
ICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOwor
ICAgIHJldHVybiBzZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5
cywgdHJhbnNhY3Rpb25QdHIpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsK
IAotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxTdHJpbmc+KGluZGV4TmFtZXMpKTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3
SW5kZXhJZHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5h
bCwgb2JqZWN0U3RvcmUsIG5hbWVzLnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhlc1JlYWR5SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRy
YW5zYWN0aW9uKSkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBpbmRleE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uSW50ZXJmYWNlKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVz
LnNpemUoKSk7CisgICAgLy8gRklYTUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRv
IGFuIGluZGV4SWQsIGV2ZW4gaWYgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBi
ZWNhdXNlIHdlIGhhdmUgdG8gcmVtb3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZl
bnRzLCBidXQgdGhpcyB3aWxsIGdvIGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAwNDI2IGxhbmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJ
ZDsKKyAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMu
YmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlLT5uYW1lKCkgPT0gaW5kZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGlu
ZGV4SWRzW2ldID0gaXQtPmtleTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRz
LCB0cmFuc2FjdGlvbkludGVyZmFjZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25Q
dHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxW
ZWN0b3I8U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3Rv
cjxpbnQ2NF90PiA+IGluZGV4SWRzID0gcG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleElkcy0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRD
b21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRh
c2tFdmVudHMoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4g
PiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhL
ZXlzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRz
LCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2Fj
dGlvbjsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6
UkVBRF9PTkxZKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBy
cFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gaW5kZXhJZHMgPSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4
TmFtZXMgJiYgaW5kZXhLZXlzICYmIGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNp
emUoKSk7CisgICAgQVNTRVJUKGluZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6
ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQg
PSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVk
ID0gZmFsc2U7CiAKQEAgLTMxNCw3ICszMzksNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAog
CiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICpp
bmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtl
SW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNH
ZW5lcmF0ZWQsICppbmRleElkcywgKmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVz
c2FnZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMwLDcgKzM1NSw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5z
aXplKCk7ICsraSkgewogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdy
aXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlz
KHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLCBvYmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFp
bmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRh
LmlkKSkgewogCiAgICAgICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKQEAgLTM3Myw3ICszOTgsNyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUAogICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9y
ZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCBpdC0+dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
OworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQo
KSwgaXQtPmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcg
KzQzNSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChp
bnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgs
IGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIW1faW5kZXhlcy5jb250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBj
b250YWluICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFtX2luZGV4ZXMuY29udGFpbnMoaWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQklu
ZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAg
IEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Myw3IEBAIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpjcmVhdGVJbmRleChpbnQ2CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5k
ZXhlcy5zZXQobmFtZSwgaW5kZXgpOworICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAg
ICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCkBAIC00NDIsMjIgKzQ2Nyw0MyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhcwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6aW5kZXgoaW50NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBp
ZiAoIWluZGV4KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1Rf
Rk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFT
U0VSVChpbmRleCk7CiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
Cit7CisgICAgcmV0dXJuIGluZGV4KGdldEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVl
LT5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0
X3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBuYW1lcykKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gcmVzdWx0OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX2luZGV4ZXMuY29udGFpbnMobmFtZSkpOworICAg
IEFTU0VSVChtX2luZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwogCiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKLSAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQoaW5kZXhJZCk7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApA
QCAtNDY3LDcgKzUxMywxMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgbV9pbmRleGVzLnJlbW92ZShuYW1lKTsKKyAgICBtX2luZGV4
ZXMucmVtb3ZlKGluZGV4SWQpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJu
IGRlbGV0ZUluZGV4KGdldEluZGV4SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7CiB9CiAK
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKQEAgLTU0MSwy
MCArNTkyLDIwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMo
KQogICAgIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzID0gYmFja2luZ1N0b3JlKCkt
PmdldEluZGV4ZXMoZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmRleGVzLnNl
dChpbmRleGVzW2ldLm5hbWUsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNl
LCB0aGlzLCBpbmRleGVzW2ldKSk7CisgICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5p
ZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIGluZGV4ZXNb
aV0pKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZy
b21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgpCiB7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5k
ZXgtPm5hbWUoKSkpOwotICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5u
YW1lKCkpOworICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4
LT5pZCgpKSk7CisgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUoaW5kZXgtPmlkKCkp
OwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiB7
CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4UHRyID0gaW5kZXg7Ci0gICAg
QVNTRVJUKCFvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4UHRyLT5uYW1lKCkp
KTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+bmFtZSgpLCBpbmRl
eFB0cik7CisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4
UHRyLT5pZCgpKSk7CisgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPmlk
KCksIGluZGV4UHRyKTsKIH0KIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggOTA4ZTdmMjM4ZWZm
MDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVjYS4uYzJlZmQzYjBlM2EyMWI2MTI0ZTA0OWNiMDEy
MGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtNTMsOCArNTMsOCBA
QCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
KTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiA+IEluZGV4TWFwOwotICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKKwogICAgIHN0YXRpYyBjb25zdCBp
bnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0CiAgICAgewpAQCAt
NjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRf
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2
b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0
IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CkBAIC04
NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJu
IG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBjb25zdCBib29sJiBhdXRvSW5j
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9Ci0gICAg
CisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAgICBpbnQ2NF90IGRhdGFi
YXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9Ci0gICAgCisKKyAgICBp
bnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPGludDY0X3Q+IGdl
dEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKIHByaXZhdGU6CiAgICAgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCkBAIC05OCw5ICsxMDcsOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKIAogICAgIHN0YXRp
YyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgUGFz
c093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhOYW1lcywgUGFz
c093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPFN0
cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRl
eCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkwNjM4ODFmMWQ0OGQ2OGRkLi45YWJlODgzY2JhOGVl
Y2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKICAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IGUw
NzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4YWVlNDc3NzQxY2EuLmI0NjJhNThhY2JlYzExNGJi
ODRmMzRlMzVlNzNmMjM0N2I4YTY0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHZv
aWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKGludDY0X3Qgb2xkVmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVjdChp
ZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9IDA7CiAKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFja2VuZCwgSURCVHJhbnNhY3Rp
b246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhpcyk7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbkJhY2tlbmQsIDAsIElEQlRyYW5zYWN0aW9u
OjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJhc2UuZ2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0
aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZyb250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0
aW9uID0gZnJvbnRlbmQ7CiAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFz
ZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAppbmRleCAxODYwYmZjNTllM2NhMzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4
Li4wZmE5OGUxYzNlYTRjODViMjU1MTI2ZTk1YTcyZWIyYWQ4OTViYTA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMy
Myw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kCiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9u
dGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBi
YWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRh
YmFzZSgpLmdldCgpKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURC
VHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIDAs
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCku
Z2V0KCkpOwogICAgIGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAg
bV90cmFuc2FjdGlvbiA9IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJREJS
ZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAobV90
cmFuc2FjdGlvbiAmJiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0aW9u
LT5zZXRFcnJvcihET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJv
ck5hbWUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgdW51c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhl
YzE1ZTVlYzA3M2RmZmIxZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjVkOWIyOTBiZjNhYzk5YzRh
NTFiMzBhMmYyZjM2ZmY0ZWYzNDJiYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5z
YWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9u
OjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb246Ok1v
ZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiKQogewogICAgIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5E
QlJlcXVlc3QgPSAwOwotICAgIHJldHVybiBjcmVhdGUoY29udGV4dCwgYmFja2VuZCwgbW9kZSwg
ZGIsIG9wZW5EQlJlcXVlc3QpOworICAgIHJldHVybiBjcmVhdGUoY29udGV4dCwgYmFja2VuZCwg
b2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpOwogfQogCi1QYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIs
IElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9u
OjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVx
dWVzdCkKIHsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVm
KG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVx
dWVzdCkpKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVm
KG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVzLCBt
b2RlLCBkYiwgb3BlbkRCUmVxdWVzdCkpKTsKICAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVl
ZGVkKCk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KQEAgLTg4LDEwICs4
OCwxMSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRl
TGVnYWN5KCkKIH0KIAogCi1JREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNl
KiBkYiwgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCkKK0lEQlRyYW5zYWN0aW9uOjpJ
REJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJ
REJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBB
Y3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQog
ICAgICwgbV9kYXRhYmFzZShkYikKKyAgICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9y
ZU5hbWVzKQogICAgICwgbV9vcGVuREJSZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21v
ZGUobW9kZSkKICAgICAsIG1fYWN0aXZlKHRydWUpCkBAIC0xNTUsMTYgKzE1NiwyNyBAQCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcAogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgp
KQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCisgICAgaWYgKCFpc1ZlcnNpb25DaGFuZ2Uo
KSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9i
amVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMpOwogICAg
IEFTU0VSVCghb2JqZWN0U3RvcmVCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQg
YSBzdG9yZSwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmlj
ZSB2ZXJzYS4KICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwotICAg
IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBtZGl0
ID0gbWV0YWRhdGEub2JqZWN0U3RvcmVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0g
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhKiBvYmplY3RTdG9yZU1ldGFkYXRhID0gMDsKKyAgICBmb3IgKElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIG9i
amVjdFN0b3JlTWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YSk7CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZSgqb2JqZWN0
U3RvcmVNZXRhZGF0YSwgb2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKICAgICBvYmplY3RTdG9y
ZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxl
YXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaAppbmRleCA4OTkzOWJmODU5NzViMWNiOWY3ZjUwYjUxOTdmOWY2YWMzMWJmYzk1
Li5mMDUyMDU4NTBlYzFhOWJjNmJkMWJjZjBlMmQ0NTE4YjEwZjBiYWJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTU2LDgg
KzU2LDggQEAgcHVibGljOgogICAgICAgICBWRVJTSU9OX0NIQU5HRSA9IDIKICAgICB9OwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBN
b2RlLCBJREJEYXRhYmFzZSopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiwgTW9kZSwgSURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMsIE1vZGUsIElE
QkRhdGFiYXNlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMs
IE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1YWwgfklE
QlRyYW5zYWN0aW9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVh
ZE9ubHkoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIElEQlRy
YW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVz
dCopOworICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogCiAgICAgdm9p
ZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vy
c29ycygpOwpAQCAtMTQ1LDYgKzE0NSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQkRhdGFi
YXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3Jl
TmFtZXM7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogbV9vcGVuREJSZXF1ZXN0OwogICAgIGNvbnN0
IE1vZGUgbV9tb2RlOwogICAgIGJvb2wgbV9hY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCmluZGV4IGYxNjY1MTk0OWJhZDNjNWIxNTFiZWI0ZmY3NWYyNWQwNmI3MWEyNjYuLjMyMzE1
NDkwZTEwY2RhYzQ0N2FlY2FkYTlkYWZkMDY2ZGJiZmQ1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwCkBAIC0zOSwxNCArMzksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0
IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQorUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
dW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVj
dFN0b3JlcywgbW9kZSwgZGF0YWJhc2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwobW9kZSwgZGF0YWJhc2UpKTsKIH0KIAotSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
IGRhdGFiYXNlKQotICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKLSAgICAs
IG1fbW9kZShtb2RlKQorSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCh1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBk
YXRhYmFzZSkKKyAgICA6IG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVzZWQpCiAgICAg
LCBtX2RhdGFiYXNlKGRhdGFiYXNlKQogICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFj
a2luZ1N0b3JlKCktPmNyZWF0ZVRyYW5zYWN0aW9uKCkpCkBAIC01NSw4ICs1NCw2IEBAIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5n
TGlzdCogb2JqZWN0U3RvcmVzCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCiAg
ICAgLCBtX3BlbmRpbmdFdmVudHMoMCkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZU5hbWVz
KTsKLSAgICBBU1NFUlQobV9tb2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSB8
fCAhbV9vYmplY3RTdG9yZU5hbWVzLT5pc0VtcHR5KCkpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7CiB9CiAKQEAg
LTY2LDMxICs2MywyMyBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCgpCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwogfQogCi1Q
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkgewogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIC8vIERvZXMgYSBsaW5lYXIgc2VhcmNoLCBidXQgaXQgcmVhbGx5
IHNob3VsZG4ndCBiZSB0aGF0IHNsb3cgaW4gcHJhY3RpY2UuCi0gICAgaWYgKG1fbW9kZSAhPSBJ
REJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgJiYgIW1fb2JqZWN0U3RvcmVOYW1lcy0+Y29u
dGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05P
VF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0
b3JlKG5hbWUpOwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0IG5v
dyBiZWFjdXNlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdzCi0g
ICAgLy8gICAgICAgIGJldHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNrIG9j
Y3VycykgYW5kIHRoZSAub2JqZWN0U3RvcmUgY2FsbC4KLSAgICAvLyAgICAgICAgVGhlcmUncyBh
IGJ1ZyB0byBtYWtlIHRoaXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtlIGl0
IGltcG9zc2libGUgaGVyZSwgd2UKLSAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNoZWNr
LgotICAgIGlmICghb2JqZWN0U3RvcmUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNl
LT5vYmplY3RTdG9yZShpZCk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4g
b2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmUobV9kYXRhYmFzZS0+Z2V0T2JqZWN0U3RvcmVJZChuYW1lKSwgZWMpOworfQorCiBib29s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhUYXNrVHlwZSB0eXBlLCBQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrKQogewogICAgIGlmIChtX3N0
YXRlID09IEZpbmlzaGVkKQpAQCAtMTAwLDcgKzg5LDcgQEAgYm9vbCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxTY3JpcHRF
eGUKICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOwogICAgIGVsc2UKICAgICAgICAg
bV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLSAgICAKKwogICAgIGlmIChhYm9y
dFRhc2spCiAgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggMzRhOTc1NzBmMDBmYjdhMDg0YjhkZDM4OTM0N2Ey
NTRhMjUzNDg2Mi4uNzVkZjk1NzNhN2FkNzcxMjRhZTU3ZDNjMmM0ZDRmYzI1OGFlNTUyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKERPTVN0cmluZ0xpc3Qq
IG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNy
ZWF0ZSh1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAgICAg
c3RhdGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIGZyb20oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiBpbnRlcmZhY2UpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+KGludGVyZmFjZSk7CkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZQogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGlu
dDY0X3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNr
RXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dENhbGxiYWNrcyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IG1fY2FsbGJh
Y2tzID0gY2FsbGJhY2tzOyB9CkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwodW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAgICAg
ZW51bSBTdGF0ZSB7CiAgICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHll
dC4KQEAgLTg5LDcgKzkwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRhc2tFdmVudFRpbWVyRmly
ZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsKICAgICB2b2lkIGNsb3NlT3Bl
bkN1cnNvcnMoKTsKIAotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3JlTmFt
ZXM7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwogCiAgICAgU3RhdGUgbV9zdGF0
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggZjcwN2YzNGEwOTk4NTRm
NDM5MjE4MjM5NGEyZjFlNzI1Y2UwNTc0Yy4uZDExZTE4MTFjZTQzNWJmNjdmMDgzM2QzZTU1ODA2
Yjg4N2NlNGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBjb21taXQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKaW5k
ZXggYTQ5MzJlZTI4MjQwMDYyZDE1N2ZjZDAyYTU5YTdiMmYzNzBlMTcyYi4uM2JhYjQ2OWY2YWQ0
M2NjOWZmMDBjZTZlYTIxYjliZWE4NWY4YzI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25D
b2RlJiBlYykgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJREJUcmFuc2FjdGlv
biB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBX
ZWJFeGNlcHRpb25Db2RlJiBlYykKQEAgLTYzLDYgKzY0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Cisg
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24odW5zaWduZWQgc2hvcnQg
bW9kZSkKKyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ2xvc2UoKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAppbmRleCBjYTAxMDNjZGE2ZmMzZjM3MmNh
ZGNhYWI3Y2Q2Y2UzMDVhMjI3ZDJlLi44ZWE4ZGI4NjZmODQwNzcyODBjZDQzNTljNzI4ZmE3ZDI4
MzYyMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9i
amVjdFN0b3JlLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgV2ViVmVj
dG9yPFdlYklEQktleT4gV2ViSW5kZXhLZXlzOwogCiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJ
bmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5
JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdl
YkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mIGluZGV4SWRz
LCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktl
eVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJF
eGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
LCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAg
ICB2aXJ0dWFsIFdlYklEQkluZGV4KiBjcmVhdGVJbmRleChjb25zdCBXZWJTdHJpbmcmLCBjb25z
dCBXZWJJREJLZXlQYXRoJiwgYm9vbCwgYm9vbCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJikKQEAgLTY5LDE0ICs3MCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklE
QktleSYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYklu
ZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJL
ZXkmLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRl
eEtleXM+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9OwogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAg
b2YgdGhlIFdlYklEQkluZGV4IHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJJbmRl
eCogaW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJikKICAgICB7
CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4KGNvbnN0IGxvbmcgbG9uZykK
KyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUlu
ZGV4KGxvbmcgbG9uZyBpbmRleElkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2Vw
dGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFz
a1R5cGUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KGNvbnN0
IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNh
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9u
LmgKaW5kZXggODE2YTMyODE0NzBiNzI5MmY0M2Q0NGQyMzJmMzAzYzRmYmI1ZDg0Ni4uYmFjMmRh
ODhkMDNhNDA5YTk3ZTE5NDgzN2VmNGQwYmI3N2ZhNGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCkBAIC01MSw2ICs1MSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQorICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0
b3JlKGxvbmcgbG9uZywgV2ViRXhjZXB0aW9uQ29kZSYpCisgICAgeworICAgICAgICBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
RGF0YWJhc2VCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
RGF0YWJhc2VCYWNrZW5kUHJveHkuY3BwCmluZGV4IDI5YjhjNGJmNDFkY2FhZmE2MTllYjZhMGQx
YTE1MTExNGMyOTFlNTMuLjI4ZjE2M2MxOTAyZWYxYWIyYWM4OTU5NDhiNjAzZWZhMjhkZjA5NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2Vu
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJh
Y2tlbmRQcm94eS5jcHAKQEAgLTg1LDYgKzg1LDE0IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
UHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rp
CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgKnRyYW5zYWN0
aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRQcm94eTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVk
IHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAor
ICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9i
amVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkg
PSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsK
KyAgICBtX3dlYklEQkRhdGFiYXNlLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOworfQorCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIEFTU0VSVChtX3dlYklEQkRhdGFiYXNlKTsKQEAgLTEwMiw2ICsxMTAsMTUgQEAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFBy
b3h5Ojp0cmFuc2FjdGlvbigKICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6
OmNyZWF0ZSh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OnRyYW5zYWN0
aW9uKHVuc2lnbmVkIHNob3J0IG1vZGUpCit7CisgICAgT3duUHRyPFdlYklEQlRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbiA9IGFkb3B0UHRyKG1fd2ViSURCRGF0YWJhc2UtPnRyYW5zYWN0aW9uKG1v
ZGUpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKHRyYW5zYWN0aW9uLnJlbGVh
c2UoKSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OmNsb3NlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KQogewogICAgIG1fd2ViSURCRGF0YWJhc2UtPmNsb3Nl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJh
Y2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNr
ZW5kUHJveHkuaAppbmRleCBmYzgzMWU4ZGVjNDlhNzllNjFjYTdjYmNlZjViNDY3ZDFjNGJkNWZk
Li40MjE1M2E5NWI0ODUzMjM2NmU2MjhmNjU3MTFlYTBhOWE2NTFmZDA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKQEAg
LTQ2LDggKzQ2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0
X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRW
ZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbih1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNr
cz4pOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDJiOWI0NGE3YTFmZmNkZDgw
MjA3NWVhMGQzOGU2YjdjMDcxNzQ4YTUuLjBhMWVmYjc3ZjE4NzFlYjE4ZTc1MTdhMWU0YmY2YmZk
MzEzOTcyMGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTc3LDYgKzc3LDE0IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0V2l0aEluZGV4S2V5
cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0
TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblBy
b3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCB3ZWJJbmRleE5hbWVzLCB3ZWJJbmRleEtleXMs
IGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorewor
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGlt
cGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0
PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURC
T2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9y
ZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyks
ICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBpbmRleElkcywgaW5k
ZXhLZXlzKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKICAgICAvLyBUaGUgdHJh
bnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5
IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtODcsNiArOTUsMTQgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LAogICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcnBQ
cmltYXJ5S2V5LCB3ZWJJbmRleE5hbWVzLCB3ZWJJbmRleEtleXMsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eTo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQor
eworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBw
b2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxs
IGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19j
YXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2Vi
SURCT2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcnBQcmltYXJ5S2V5LCBXZWJWZWN0b3I8bG9u
ZyBsb25nPihpbmRleElkcyksIGluZGV4S2V5cywgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklE
QlRyYW5zYWN0aW9uKCkpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0
aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmpl
Y3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTEzMCw3ICsxNDYsMTUgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbmRleE5hbWUKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVk
IHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAog
ICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9i
amVjdHMuCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkg
PSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsK
LSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOworICAgIG1fd2ViSURCT2Jq
ZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8V2ViU3RyaW5nPihpbmRleE5hbWVz
KSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOworfQorCit2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbikKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVk
IHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAor
ICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9i
amVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkg
PSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsK
KyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoV2ViVmVjdG9yPGxvbmcg
bG9uZz4oaW5kZXhJZHMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTE0MSw2ICsxNjUsMTMgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChjb25zdCBTdHIKICAgICBy
ZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOwogfQog
CitQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHk6OmluZGV4KGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBPd25QdHI8V2ViSURCSW5k
ZXg+IGluZGV4ID0gYWRvcHRQdHIobV93ZWJJREJPYmplY3RTdG9yZS0+aW5kZXgoaW5kZXhJZCkp
OworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBJREJJbmRl
eEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVhc2UoKSk7Cit9CiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUg
YSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xNDks
NiArMTgwLDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CCiAgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVs
ZXRlSW5kZXgoY29uc3QgaW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBUaGUgdHJh
bnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5
IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5k
ZWxldGVJbmRleChpbmRleElkLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rp
b24oKSwgZWMpOworfQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6b3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBU
aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBh
IHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKaW5kZXggODQ3
MGMxYWQ5MDViYzE1NmZkOWYzYjhmYzE0ZWZmMWU0MTFlOGJlYi4uNzkxMTNhZTk1NjVhMzE0ZGNj
ZjJiYWM3ODBlYmE3NTM5NGY2Y2RhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCkBAIC00NSwxNiArNDUsMjEg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+Jiwg
Y29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPGludDY0X3Q+JiwgY29uc3QgV1RGOjpWZWN0b3I8
SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+
LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJD
b3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJL
ZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0
IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPGludDY0
X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Kik7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKwog
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAg
ICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBv
cGVuQ3Vyc29yKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBXZWJDb3JlOjpJREJD
dXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmNwcAppbmRleCA4OGY5ODUyYWNlZjRjNmU4OWE1ODllNDUyNTllMjJiMWYzODZiMWU1Li5i
M2VkMjJhMWZlMjlhZDIyMmEwYzhlMzk4NzNmOGM0NjE1OGZmNWU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHku
Y3BwCkBAIC02MSw2ICs2MSwxMyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0bwogICAgICAgICBy
ZXR1cm4gMDsKICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShv
YmplY3RTdG9yZS5yZWxlYXNlKCkpOwogfQorUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpvYmplY3RT
dG9yZShpbnQ2NF90IGluZGV4SWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIE93blB0cjxX
ZWJJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBhZG9wdFB0cihtX3dlYklEQlRyYW5zYWN0
aW9uLT5vYmplY3RTdG9yZShpbmRleElkLCBlYykpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6
Y3JlYXRlKG9iamVjdFN0b3JlLnJlbGVhc2UoKSk7Cit9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHk6OmNvbW1pdCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaAppbmRleCA3ZTc0ODZiZDdjMzIw
NjZjYzAyZDY3NjFjODA5N2M5YmNkZjUzM2U1Li5lOGYyYzMzNzU0ODM0ZGViZTQ0Njk0ZGUwNGZi
MDFjZDllZTQxODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KCk7CiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcAppbmRleCBkZDFjMmM4ZTU0MGZmZWJiMzg4YWQy
Y2MxMzZiOGNlYmZmMDlkY2I3Li4yY2E1YmY3YzdkNmIyOWMyZTJhMDZmYmVmYzY4NmM1MmVhOGM2
YzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3Bw
CkBAIC00OSw2ICs0OSw3IEBAIFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YShjb25zdCBX
ZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBmb3IgKElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBzdG9yZUl0ZXJhdG9y
ID0gbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IHN0b3JlSXRlcmF0b3IgIT0gbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK3N0b3JlSXRlcmF0b3IpIHsKICAgICAgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgT2JqZWN0U3RvcmUgd2ViT2JqZWN0U3RvcmU7CisgICAgICAgIHdlYk9iamVj
dFN0b3JlLmlkID0gb2JqZWN0U3RvcmUuaWQ7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLm5hbWUg
PSBvYmplY3RTdG9yZS5uYW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5rZXlQYXRoID0gb2Jq
ZWN0U3RvcmUua2V5UGF0aDsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCA9
IG9iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQ7CkBAIC01OSw2ICs2MCw3IEBAIFdlYklEQk1ldGFk
YXRhOjpXZWJJREJNZXRhZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSkKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4o
KTsgaW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2luZGV4SXRl
cmF0b3IpIHsKICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5k
ZXhJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBJbmRleCB3ZWJJbmRleDsKKyAgICAgICAg
ICAgIHdlYkluZGV4LmlkID0gaW5kZXguaWQ7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0g
aW5kZXgubmFtZTsKICAgICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRo
OwogICAgICAgICAgICAgd2ViSW5kZXgudW5pcXVlID0gaW5kZXgudW5pcXVlOwpAQCAtNzksOSAr
ODEsOSBAQCBXZWJJREJNZXRhZGF0YTo6b3BlcmF0b3IgSURCRGF0YWJhc2VNZXRhZGF0YSgpIGNv
bnN0CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViT2JqZWN0U3RvcmUuaW5kZXhl
cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgSW5kZXggd2ViSW5kZXggPSB3ZWJP
YmplY3RTdG9yZS5pbmRleGVzW2pdOwogICAgICAgICAgICAgSURCSW5kZXhNZXRhZGF0YSBpbmRl
eCh3ZWJJbmRleC5uYW1lLCB3ZWJJbmRleC5pZCwgd2ViSW5kZXgua2V5UGF0aCwgd2ViSW5kZXgu
dW5pcXVlLCB3ZWJJbmRleC5tdWx0aUVudHJ5KTsKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLmlu
ZGV4ZXMuc2V0KGluZGV4Lm5hbWUsIGluZGV4KTsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLmlu
ZGV4ZXMuc2V0KGluZGV4LmlkLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICAgICAgZGIub2JqZWN0
U3RvcmVzLnNldChvYmplY3RTdG9yZS5uYW1lLCBvYmplY3RTdG9yZSk7CisgICAgICAgIGRiLm9i
amVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsKICAgICB9CiAgICAg
cmV0dXJuIGRiOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QlRyYW5zYWN0aW9uSW1wbC5jcHAKaW5kZXggNWNiYmVlNjYzNGEzYmZmMTk0NzBkNmY3OWIwYWFm
NGFiODcwNGMwZi4uNjYxNmQ2NzFmYzMwYzk3ZTY3MjYxNGMxYTQxOTllM2E3ZDA4ODU3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbklt
cGwuY3BwCkBAIC01NSw2ICs1NSwxNCBAQCBXZWJJREJPYmplY3RTdG9yZSogV2ViSURCVHJhbnNh
Y3Rpb25JbXBsOjpvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIEV4YwogICAgIHJl
dHVybiBuZXcgV2ViSURCT2JqZWN0U3RvcmVJbXBsKG9iamVjdFN0b3JlKTsKIH0KIAorV2ViSURC
T2JqZWN0U3RvcmUqIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUobG9uZyBsb25n
IGluZGV4SWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShp
bmRleElkLCBlYyk7CisgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG5ldyBXZWJJREJPYmplY3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOworfQorCiB2
b2lkIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6Y29tbWl0KCkKIHsKICAgICBtX2JhY2tlbmQtPmNv
bW1pdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJh
bnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2Fj
dGlvbkltcGwuaAppbmRleCA2NmUzMTUzMDAwZTczYjBjZWI3NGU4N2EyN2Y3ODlmYmIyZGZhNzMz
Li4xZWU2YWI4MDE5N2VmNzhmYWZhMTNlOTZmZDA1ZjcwZjM3YmFkNzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaApAQCAtMzks
OSArMzksMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJJREJUcmFuc2FjdGlvbklt
cGw6IHB1YmxpYyBXZWJJREJUcmFuc2FjdGlvbiB7CiBwdWJsaWM6CiAgICAgV2ViSURCVHJhbnNh
Y3Rpb25JbXBsKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+KTsKLSAgICB2aXJ0dWFsIH5XZWJJREJUcmFuc2FjdGlvbkltcGwoKTsgIAorICAg
IHZpcnR1YWwgfldlYklEQlRyYW5zYWN0aW9uSW1wbCgpOwogCiAgICAgdmlydHVhbCBXZWJJREJP
YmplY3RTdG9yZSogb2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRp
b25Db2RlJik7CisgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUobG9u
ZyBsb25nIGluZGV4SWQsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlVGFza0V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKaW5kZXggODkzNjNmMDA3NzQ0ZDQwNjI4
ZGI1ODZjZTk3YmM0NzcxM2ZiZWZhZS4uNzhiNGNhODcxYmVkMzJkMzRiYmNhNzEyZjk4ODczNjhh
NWIwMmFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRh
YmFzZUJhY2tlbmRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCkBAIC0xNTIsOCArMTUyLDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBJ
REJEYXRhYmFzZU1ldGFkYXRhKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgeyB9CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJh
bnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwg
RXhjZXB0aW9uQ29kZSYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbih1bnNpZ25lZCBzaG9ydCBt
b2RlKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171013</attachid>
            <date>2012-10-26 14:34:39 -0700</date>
            <delta_ts>2012-10-29 17:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121026143311.patch</filename>
            <type>text/plain</type>
            <size>104860</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI1ZGMyN2YzYjg5ODIz
ODI5ODRkNDJjYmYwZTA2YjRiMTI3YWFhMi4uZGI2NmY5NzRlZGJiMWZjMDY5YTEwZjVhOWY3ZTk0
MGZlZTg2N2Y0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI2ICBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBQcmludGluZyBzaG91bGQg
dXNlIHVzZSBoaWdoIHJlc29sdXRpb24gaW1hZ2VzIHdoZW4gYXZhaWxhYmxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDU4ODg1YmU0NDJlZGZiYTFhNTA2ZjU3YjA0NDhjYmNkMTNmOWQ0
MzcuLjIyOWMyNDIyY2FmYzMxMzEzZTczZmU4ODM3ZjE0NjkzODE2MzdkMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTItMTAtMjUgIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogYWRkIG1ldGhv
ZHMgdG8gc3VwcG9ydCBpZC1iYXNlZCBiYWNrZW5kIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIFByb3h5IGFuZCBXZWJJREIqIHN1
cHBvcnQgZm9yIG5ldyBpbnQ2NF90LWJhc2VkIG1ldGhvZHMuCisKKyAgICAgICAgKiBwdWJsaWMv
V2ViSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2U6OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9i
amVjdFN0b3JlOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RT
dG9yZTo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3Rv
cmU6OmluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUlu
ZGV4KToKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBzcmMvSURC
RGF0YWJhc2VCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJh
Y2tlbmRQcm94eTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6SURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKiBzcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKElEQkRhdGFiYXNl
QmFja2VuZFByb3h5KToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5OjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAgKFdlYktpdDo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KToKKyAgICAgICAgKFdlYktpdDo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5KToK
KyAgICAgICAgKiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6b2JqZWN0U3RvcmUpOgorICAgICAg
ICAqIHNyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9XZWJJREJNZXRhZGF0YS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQk1ldGFkYXRhOjpvcGVyYXRvciBJREJEYXRhYmFzZU1ldGFkYXRhKToK
KyAgICAgICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViSURCVHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAqIHNyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgKiB0ZXN0
cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcDoKKwogMjAxMi0xMC0yNiAgVGhpYWdvIE1hcmNv
cyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBBZGQgZmVh
dHVyZSBmbGFncyBmb3IgQ1NTIERldmljZSBBZGFwdGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmluZGV4IGMzOTQwNjhjNTI3OTUwYzcw
MDAwNzhhNWNkNDQ1NDNkZDQyMDliOWUuLmIzZWM0YjI3MGYzYTU2OGUzZGY5OTc1YmIyOTE4MTI1
Nzk1ZWQ3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNh
bGxiYWNrcy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaWZuZGVmIElEQkNhbGxiYWNrc19oCiAjZGVm
aW5lIElEQkNhbGxiYWNrc19oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VF
cnJvci5oIgogI2luY2x1ZGUgIklEQktleS5oIgpAQCAtNjcsNyArNjYsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBGcm9tIElEQkZhY3Rvci5kZWxldGVEYXRhYmFzZSgpLCBJREJPYmplY3RTdG9yZS9J
REJJbmRleC5nZXQoKSwgSURCT2JqZWN0U3RvcmUuZGVsZXRlKCksIElEQk9iamVjdFN0b3JlLmNs
ZWFyKCkKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKCkgPSAwOwotICAgIAorCiAgICAgLy8g
RnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKICAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXks
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAwOwogICAgIC8vIEZyb20gSURC
Q3Vyc29yLmFkdmFuY2UoKS9jb250aW51ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggMmM5MWQ3MmY3ZWRmYzI2YjJjNDIzMzZj
NzU5ZDhlNGZjYTU5YTA4OC4uZmNjYjQ1NmM1ZDY4YTIxNDY3ZjU4ZjA5Y2RjNjI3ZmMzMGZkOTc4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0
YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9y
IChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0
LT5rZXkpOworICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUp
OwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVO
YW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0xNDIsNyArMTQyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBhdGhTdHJpbmcpOwog
ICAgIH0KIAotICAgIGlmIChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSkg
eworICAgIGlmIChtX21ldGFkYXRhLmNvbnRhaW5zT2JqZWN0U3RvcmUobmFtZSkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KQEAgLTE3MCw3ICsxNzAsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
bwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBvYmplY3RTdG9y
ZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6Ok1pbmltdW1JbmRleElkKTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgb2JqZWN0U3RvcmVCYWNrZW5k
LnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CiAgICAgKyttX21ldGFkYXRh
Lm1heE9iamVjdFN0b3JlSWQ7CiAKICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2Jq
ZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKQEAgLTE4Nyw3ICsxODcsOSBAQCB2
b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFO
U0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSkgeworCisgICAgaW50NjQgb2Jq
ZWN0U3RvcmVJZCA9IG1fbWV0YWRhdGEuZmluZE9iamVjdFN0b3JlKG5hbWUpOworICAgIGlmIChv
YmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NSw3ICsxOTcsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKICAgICAgICAgbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLSAgICAgICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOworICAgICAgICBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CiAgICAgfQogfQogCkBAIC0yNDEs
NiArMjQzLDEzIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RvcmVOYW1lcy0+bGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBpZiAoIW1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShzdG9y
ZU5hbWVzLT5pdGVtKGkpKSkgeworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCX05PVF9GT1VORF9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIHN5bmNo
cm9ub3VzbHkuIExvY2tzIGFyZSBhY3F1aXJlZCBhc3luY2hyb25vdXNseS4gT3BlcmF0aW9ucwog
ICAgIC8vIGNhbiBiZSBxdWV1ZWQgYWdhaW5zdCB0aGUgdHJhbnNhY3Rpb24gYXQgYW55IHBvaW50
LiBUaGV5IHdpbGwgc3RhcnQgZXhlY3V0aW5nIGFzIHNvb24gYXMgdGhlCiAgICAgLy8gYXBwcm9w
cmlhdGUgbG9ja3MgaGF2ZSBiZWVuIGFjcXVpcmVkLgpAQCAtMjUwLDcgKzI1OSw3IEBAIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIEFTU0VSVChlYyk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gSURCVHJh
bnNhY3Rpb246OmNyZWF0ZShjb250ZXh0LCB0cmFuc2FjdGlvbkJhY2tlbmQsIG1vZGUsIHRoaXMp
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgKnN0b3JlTmFtZXMsIG1vZGUs
IHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKHRyYW5zYWN0aW9u
LmdldCgpKTsKICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcAppbmRleCBjMzZkOGMzMjlhMGVmZjhiNmJiZTVlMWRjYWIxMzgxNWVkZTRhMTUz
Li4yMzE2MGQxNTlkYjM3NmMzZmNiMTBmYTNhNzFhYjE2MzA5MDg0YzQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcApAQCAtMTY3LDEzICsxNjcsMTMgQEAgSURCRGF0YWJhc2VNZXRhZGF0YSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiAgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgYSB3YXkgdG8ga2VlcCBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQoTikuaW5kZXhl
cyB1cCB0byBkYXRlIHJhdGhlciB0aGFuIHJlZ2VuZXJhdGluZyB0aGlzIGV2ZXJ5IHRpbWUuCiAg
ICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX21ldGFkYXRhKTsKICAgICBmb3IgKE9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRhdGEoKSk7CisgICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPnZhbHVlLT5pZCgpLCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAogUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQoIW1f
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVz
LmNvbnRhaW5zKGlkKSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBpZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCkpOwogICAgIEFTU0VS
VChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGVPYmplY3RTCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1fb2Jq
ZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgbV9vYmplY3RTdG9yZXMuc2V0
KGlkLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0K
IApAQCAtMjA3LDE3ICsyMDcsMjcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAogICAgIHRyYW5z
YWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUpCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGludDY0X3QgaWQpCiB7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChuYW1lKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9y
ZXMuZ2V0KGlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoraW50NjRfdCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAg
ICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworICAgIGZvciAoT2JqZWN0
U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQg
IT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+
bmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKGlkKSk7CiAKICAgICBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChu
YW1lKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUg
PSBtX29iamVjdFN0b3Jlcy5nZXQoaWQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJh
bnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTIyNyw3ICsyMzcsNyBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3RpbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9vYmplY3RT
dG9yZXMucmVtb3ZlKG5hbWUpOworICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShpZCk7CiB9CiAK
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
QEAgLTQyMSwyMCArNDMxLDE4IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vz
c1BlbmRpbmdDYWxscygpCiAgICAgQVNTRVJUKG1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkp
OwogfQogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVO
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
dHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9y
ZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2Jq
ZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7CiAgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQogCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIHRyYW5zYWN0
aW9uKCpvYmplY3RTdG9yZU5hbWVzLCBtb2RlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsK
ICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOwpAQCAtNjExLDIxICs2MTksMjEgQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICBWZWN0
b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gb2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUt
PmdldE9iamVjdFN0b3JlcyhtX21ldGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U3RvcmVzLnNpemUoKTsgaSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5z
ZXQob2JqZWN0U3RvcmVzW2ldLm5hbWUsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZXNbaV0pKTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9i
amVjdFN0b3Jlc1tpXS5pZCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3Jlc1tpXSkpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJl
bW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBwcnBPYmplY3RTdG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAgICBBU1NF
UlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkp
KTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1l
KCkpOworICAgIEFTU0VSVChkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmUtPmlkKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVj
dFN0b3JlLT5pZCgpKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmpl
Y3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKQogewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZVB0ciA9IG9iamVjdFN0b3JlOwotICAgIEFTU0VSVCghZGF0YWJhc2Ut
Pm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlUHRyLT5uYW1lKCkpKTsKLSAgICBk
YXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlUHRyLT5uYW1lKCksIG9iamVj
dFN0b3JlUHRyKTsKKyAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlu
cyhvYmplY3RTdG9yZVB0ci0+aWQoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5z
ZXQob2JqZWN0U3RvcmVQdHItPmlkKCksIG9iamVjdFN0b3JlUHRyKTsKIH0KIAogdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaAppbmRleCAxMWE2OWQwYmZkYTY2YjA2MjAxZDM5NjNjMGVlMTQ0YWI4OGUzNWU4Li4y
NGZkNzY5MWVlN2YwNjA2ZDM3NDJjNzJhOTZkM2IzMjg2MDlhMTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCkBAIC02MiwxMiArNjIsMTUgQEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUo
Z2V0T2JqZWN0U3RvcmVJZChuYW1lKSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24o
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9N
U3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgdW5zaWduZWQgc2hv
cnQpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPik7CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShpbnQ2NF90IGlkKTsKKyAgICBpbnQ2NF90IGdldE9i
amVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgdm9pZCB0cmFuc2FjdGlv
bkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpAQCAtMTAw
LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBh
IFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2Ug
Z3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KICAg
ICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAKLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmpl
Y3RTdG9yZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CiAgICAgT2JqZWN0U3RvcmVNYXAg
bV9vYmplY3RTdG9yZXM7CiAKICAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4g
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRl
eCA0Y2QwODQ1YjQzNmIyNzQ4N2IxZGMxNTdhMTg4MTdkMWZiZTE3YzQ5Li41ZmQzOWM2ZTk2MGI3
MDE4Y2I2YWZhMmMwNjQzZjI2ZTI2YjAyZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aApAQCAtNTYsOCArNTYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0
b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggODUzNTc1
N2YyMDY1NTE3MDE1YjgxMDQxZmUxMmM2YTA2NTk0ZDZiMS4uZTc4OTEzYmEwNGNiYmM3MzMyMjgz
ZjA1ZjRiYWFhNTAwMGIzZTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKaW5kZXgg
NDIxOTE1NzkyNTkzNjcyOTE2YmY3OTkwNTU4ODU1MzlkOGUyNmY2Yy4uZDBlNzRkNTc0MWY2MjU3
ZjgwNGU3OTg1Y2VlNmEzMzIzNDg3ZDM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBJREJGYWN0
b3J5X2gKICNkZWZpbmUgSURCRmFjdG9yeV9oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0Lmgi
CiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJP
cGVuREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0
OTA5MTYyM2Q4ZGUyM2Y5YTg3NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4Yjgx
M2E3YmExMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRy
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3Qg
aWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5
IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwg
c3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5
UmFuZ2UqPigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihj
b250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9u
TmV4dCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApp
bmRleCAwNzYxZjA2ODFiYmM5ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1
MmZjNGI4ZmE4MjI4YTRlZjg4YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDYzNTFlNmZiOGU3NzAwMjYy
ZjZkYzM1ZGYwMzEyMDk4MTNiMjA5ZDAuLmJhYzhjZWEwNjVmYzgwZDc3ZWIyNWFhMmFiZWNhYzIx
MzYwOTQ4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVBhdGguY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlw
ZS5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29k
ZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0
YWRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgK
aW5kZXggNzY4ZWJiYWY0YTYzNjE5OWI5ZGEwMDI2N2UyYzBkNDc2ZGM5YjgwYS4uMWIwMzg0YmQ5
NTY5MWU0Y2ZhNzcxYzQxOTI4NTcyYzljMmIxNjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCkBAIC0zOCwzNyArMzgsMjEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLXN0cnVj
dCBJREJJbmRleE1ldGFkYXRhOwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7Ci0gICAg
Ly8gRklYTUU6IFRoZXNlIGNhbiBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgotICAgIGVu
dW0gewotICAgICAgICBOb0ludFZlcnNpb24gPSAtMSwKLSAgICAgICAgRGVmYXVsdEludFZlcnNp
b24gPSAwCi0gICAgfTsKLQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQotICAgICAgICA6IGlu
dFZlcnNpb24oTm9JbnRWZXJzaW9uKQotICAgIHsKLSAgICB9Ci0gICAgSURCRGF0YWJhc2VNZXRh
ZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCitzdHJ1Y3Qg
SURCSW5kZXhNZXRhZGF0YSB7CisgICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQorICAgIElEQklu
ZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogICAgICAgICA6IG5h
bWUobmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCi0g
ICAgICAgICwgaW50VmVyc2lvbihpbnRWZXJzaW9uKQotICAgICAgICAsIG1heE9iamVjdFN0b3Jl
SWQobWF4T2JqZWN0U3RvcmVJZCkKLSAgICB7Ci0gICAgfQotCisgICAgICAgICwga2V5UGF0aChr
ZXlQYXRoKQorICAgICAgICAsIHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeSht
dWx0aUVudHJ5KSB7IH0KICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIFN0
cmluZyB2ZXJzaW9uOwotICAgIGludDY0X3QgaW50VmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9i
amVjdFN0b3JlSWQ7CisgICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJvb2wgdW5pcXVlOwor
ICAgIGJvb2wgbXVsdGlFbnRyeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQk9i
amVjdFN0b3JlTWV0YWRhdGE+IE9iamVjdFN0b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG9i
amVjdFN0b3JlczsKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIH07
CiAKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKQEAgLTg3LDIzICs3MSw2NiBAQCBz
dHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50Owog
ICAgIGludDY0X3QgbWF4SW5kZXhJZDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElE
QkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFs
aWRJZCA9IC0xOworCisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRh
dGE+IEluZGV4TWFwOwogICAgIEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5z
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiB9OwogCi1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5k
ZXhNZXRhZGF0YSgpIHsgfQotICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9v
bCBtdWx0aUVudHJ5KQorc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1F
OiBUaGVzZSBjYW4gcHJvYmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9JbnRWZXJzaW9uID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAor
ICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YT4gT2JqZWN0U3RvcmVNYXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAg
ICAgOiBpbnRWZXJzaW9uKE5vSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFi
YXNlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQog
ICAgICAgICA6IG5hbWUobmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRo
KGtleVBhdGgpCi0gICAgICAgICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5
KG11bHRpRW50cnkpIHsgfQorICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBp
bnRWZXJzaW9uKGludFZlcnNpb24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmpl
Y3RTdG9yZUlkKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKE9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmpl
Y3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9
PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW52YWxpZElkOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9i
amVjdFN0b3JlKG5hbWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAg
ICB9CisKICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIElEQktleVBhdGgg
a2V5UGF0aDsKLSAgICBib29sIHVuaXF1ZTsKLSAgICBib29sIG11bHRpRW50cnk7CisgICAgU3Ry
aW5nIHZlcnNpb247CisgICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGludDY0X3QgbWF4T2Jq
ZWN0U3RvcmVJZDsKKworICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAppbmRleCBmYzY1NzNhMThhMjg2ZWMwYTYyNWNmNmE1NWRmNjUyZTFhZDdhYmEzLi5kOWQy
ZWMyODA0OTU5NGUyNzA4OGQxZmZjZmQyMzIxNjk3NjUxNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC02Niw3ICs2
Niw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFt
ZXMoKSBjb25zdAogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsK
ICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNy
ZWF0ZSgpOwogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRh
dGEuaW5kZXhlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5r
ZXkpOworICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIGlu
ZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBA
IC0yMDksNyArMjA5LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBmb3IgKElEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRh
dGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQp
IHsKICAgICAgICAgSW5kZXhLZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9y
VmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVu
ZChpdC0+a2V5KTsKKyAgICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwog
ICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhL
ZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgUGFz
c1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICAgICAgZWMgPSBOQVRJVkVfVFlQRV9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5z
KG5hbWUpKSB7CisgICAgaWYgKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgewogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpAQCAtNDA5LDcgKzQwOSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+
IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0CiAgICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRo
LCB1bmlxdWUsIG11bHRpRW50cnkpOwogICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJ
bmRleDo6Y3JlYXRlKG1ldGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAg
bV9tZXRhZGF0YS5pbmRleGVzLnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5p
bmRleGVzLnNldChpbmRleElkLCBtZXRhZGF0YSk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBp
ZiAoZWMpCkBAIC00NDQsMTUgKzQ0NCwyNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmpl
Y3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAg
IGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9i
YWNrZW5kLT5pbmRleChuYW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVj
KTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFu
IGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFt
X21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0K
IAotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBt
ZGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0g
bV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBB
U1NFUlQoIWVjICYmIGluZGV4QmFja2VuZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4
ID0gSURCSW5kZXg6OmNyZWF0ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwg
dGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSog
aW5kZXhNZXRhZGF0YSgwKTsKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1
ZS5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4
TWV0YWRhdGEpOworCisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVh
dGUoKmluZGV4TWV0YWRhdGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1
cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDY3LDIxICs0NzYsMjAgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJ
VkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5pbmRl
eGVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgo
bmFtZSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VO
RF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUlu
ZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsK
KyAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAg
IElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAg
ICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fbWV0YWRhdGEu
aW5kZXhlcy5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKICAgICAgICAgICAgIGl0LT52YWx1ZS0+
bWFya0RlbGV0ZWQoKTsKICAgICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwogICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1l
KSk7Ci0gICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDIzYTMzNjdmNGMzYjU2MzgzNmU1NWFj
NDk4ZDc1NzYxZDIwMTA0NDYuLmQ2YjYzZDgzMjk2MmU2Y2UxZWRjM2JmMzBhNDM2OTBmZjllNzNm
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIK
LSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgi
CiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNr
cy5oIgpAQCAtMTA3LDcgKzEwNiw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3
aXJlRGF0YSkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJ
bmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBw
cnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBAIC0xMTgs
MTYgKzExNywyMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRl
eEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgp
ICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3RvcjxTdHJp
bmc+ID4gbmV3SW5kZXhOYW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5h
bWVzKSk7CisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQ
dHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+IG5ld0luZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihp
bmRleEtleXMpKTsKIAogICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKIAogICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRl
eE5hbWVzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBv
YmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwg
bmV3SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhO
YW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYp
Cit7CisgICAgcmV0dXJuIHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFj
a3MsIHRyYW5zYWN0aW9uUHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsK
K30KIG5hbWVzcGFjZSB7CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0xNTcsOCAr
MTYwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29s
IHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0Cisg
ICAgYm9vbCB3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNr
aW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7CisgICAg
ICAgIGludDY0X3QgaW5kZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjgsOCArMTcyLDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZhdGU6CiAK
ICAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkzLDEzICsx
OTUsMTMgQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhO
YW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRl
cnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4
SWRzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVy
cywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgp
ID09IGluZGV4S2V5cy5zaXplKCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5k
ZXhLZXlzLnNpemUoKSk7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlNYXAuYWRk
KGluZGV4TmFtZXNbaV0sIGluZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAgICAgaW5k
ZXhLZXlNYXAuYWRkKGluZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9yIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9y
ZS0+aXRlckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQo
KTsgKytpdCkgewogCkBAIC0yMjgsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3Jp
dGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNl
dEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0cikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNldEluZGV4S2V5cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBw
cnBQcmltYXJ5S2V5OwpAQCAtMjQzLDcgKzI0NSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlv
biwgdGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4
V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJh
bnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAm
aW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byBkZWFsIHdpdGggZXJyb3JNZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25seSBmYWls
cyBvbiB1bmlxdWVuZXNzIGNvbnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2FjdGlvbi0+
YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05T
VFJBSU5UX0VSUiwgIkR1cGxpY2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmplY3Qgc3Rv
cmUuIikpOwogICAgICAgICByZXR1cm47CkBAIC0yNTEsNDYgKzI1Myw2OCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwgYwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhX
cml0ZXJzW2ldLmdldCgpOwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5
cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQsIG1f
aW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAg
aWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwg
KmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
ZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uSW50ZXJmYWNlKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQoreworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOworICAgIHJl
dHVybiBzZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJh
bnNhY3Rpb25QdHIpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldElu
ZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKIAotICAg
IE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJp
bmc+KGluZGV4TmFtZXMpKTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJ
ZHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIG5hbWVzLnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1Jl
YWR5SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0
aW9uKSkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBp
bmRleE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50
ZXJmYWNlKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUo
KSk7CisgICAgLy8gRklYTUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGlu
ZGV4SWQsIGV2ZW4gaWYgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNl
IHdlIGhhdmUgdG8gcmVtb3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBi
dXQgdGhpcyB3aWxsIGdvIGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAwNDI2IGxhbmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKKyAg
ICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4o
KTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZh
bHVlLT5uYW1lKCkgPT0gaW5kZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGluZGV4SWRz
W2ldID0gaXQtPmtleTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFu
c2FjdGlvbkludGVyZmFjZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3RvcjxpbnQ2
NF90PiA+IGluZGV4SWRzID0gcG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmRleElkcy0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0
ZVByZWVtcHRpdmVFdmVudCgpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJ
bmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJw
VHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNz
T3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9P
TkxZKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVl
OwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVjdG9yPFN0
cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPGlu
dDY0X3Q+ID4gaW5kZXhJZHMgPSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4
S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMg
JiYgaW5kZXhLZXlzICYmIGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7
CisgICAgQVNTRVJUKGluZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09
IGluZGV4S2V5cy0+c2l6ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmpl
Y3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFs
c2U7CiAKQEAgLTMxNCw3ICszMzgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtl
eXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhX
cml0ZXJzKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0
ZWQsICppbmRleElkcywgKmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMwLDcgKzM1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7
ICsraSkgewogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29y
ZElkZW50aWZpZXIuZ2V0KCksICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBvYmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5nZXQo
aW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdy
aXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVjdFN0b3Jl
LT5iYWNraW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKSkg
ewogCiAgICAgICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJy
b3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKGVycm9yKTsKQEAgLTM3Myw3ICszOTcsNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUAogICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNv
ci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3Rv
cmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCBpdC0+dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQt
PmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcgKzQzNCw3
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90
IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wg
dW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoIW1faW5kZXhlcy5jb250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWlu
ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lu
ZGV4ZXMuY29udGFpbnMoaWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0g
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0
YWRhdGEobmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VS
VChpbmRleC0+bmFtZSgpID09IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Miw3IEBAIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChpbnQ2CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5kZXhlcy5z
ZXQobmFtZSwgaW5kZXgpOworICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAgICByZXR1
cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCkBAIC00NDIsMjIgKzQ2Niw0MiBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhcwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6aW5kZXgoaW50NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWlu
ZGV4KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFTU0VSVChp
bmRleCk7CiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCit7Cisg
ICAgcmV0dXJuIGluZGV4KGdldEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0
ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1l
KCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0X3Q+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBuYW1lcykKIHsKLSAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBW
ZWN0b3I8aW50NjRfdD4gcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQo
bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTQ2Nyw3
ICs1MTEsMTIgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmEKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CisgICAgbV9pbmRleGVzLnJlbW92
ZShpbmRleElkKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBkZWxldGVJ
bmRleChnZXRJbmRleElkKG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwogfQogCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCkBAIC01NDEsMjAgKzU5MCwy
MCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAgICBW
ZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRl
eGVzKGRhdGFiYXNlSWQoKSwgbV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGluZGV4ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhl
c1tpXS5uYW1lLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywg
aW5kZXhlc1tpXSkpOworICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQklu
ZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CiB9
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQog
ewotICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1l
KCkpKTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkp
OworICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKIH0KIAog
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewogICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VSVCgh
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0gICAg
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOwor
ICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+aWQo
KSkpOworICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5pZCgpLCBpbmRl
eFB0cik7CiB9CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQpAQCAtNTczLDcgKzYyMiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrCiAgICAg
YmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBz
dGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJl
bnQpOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKaW5kZXggOTA4ZTdmMjM4ZWZmMDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVj
YS4uYzJlZmQzYjBlM2EyMWI2MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaApAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1
YWwgfklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOwotICAgIAorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJ
bmRleE1hcDsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAg
aW50NjRfdCBpZCgpIGNvbnN0CiAgICAgewpAQCAtNjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAg
ICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4s
IFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRy
PElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZp
cnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNS
ZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CkBAIC04NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBh
dGg7IH0KICAgICBjb25zdCBib29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2lu
Z1N0b3JlKCk7IH0KICAgICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGFiYXNlLT5pZCgpOyB9Ci0gICAgCisKKyAgICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3Ry
aW5nJik7CisgICAgVmVjdG9yPGludDY0X3Q+IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+Jik7CisKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwog
CkBAIC05OCw5ICsxMDcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9y
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJv
b2wgY2hlY2tDdXJyZW50KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRy
PElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBv
cEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CisgICAgc3RhdGlj
IHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9y
PGludDY0X3Q+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+
KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJ
bmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBw
b3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAg
ICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2
b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkw
NjM4ODFmMWQ0OGQ2OGRkLi45YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsK
IAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+Jiwg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1
bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50
NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlL
ZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IGUwNzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4
YWVlNDc3NzQxY2EuLmIyMzkwMTYxOWJjYTNhMTA5YWZhNmQyNWE4YThkN2U1ZWY3ODI0Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJl
cXVlc3QuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdy
YWRlTmVlZGVkKGludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAg
bV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9k
YXRhYmFzZUNhbGxiYWNrcyA9IDA7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250
ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRy
YW5zYWN0aW9uQmFja2VuZCwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRh
YmFzZS5nZXQoKSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9
IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2Fj
dGlvbkJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSwgaWRiRGF0YWJhc2UuZ2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+
c2V0Q2FsbGJhY2tzKGZyb250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gZnJvbnRl
bmQ7CiAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApp
bmRleCAxODYwYmZjNTllM2NhMzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4Li5jNmM2ZTNlMzhm
OWFjYTYwNDUzNTBlNzNiNTIyNzE2ZDBiYzFmM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQg
SURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBwcnBCYWNrZW5kCiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgp
KTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+
KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNl
KCkuZ2V0KCkpOwogICAgIGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAg
ICAgbV90cmFuc2FjdGlvbiA9IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJ
REJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAo
bV90cmFuc2FjdGlvbiAmJiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0
aW9uLT5zZXRFcnJvcihET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRF
cnJvck5hbWUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgdW51c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4
IDhlYzE1ZTVlYzA3M2RmZmIxZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjQ3MDA1YzNiNzYxZTIw
YzI1ZjA4OTEyMWM0NjM3ZjMwYmE4NzNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0
aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9k
ZSBtb2RlLCBJREJEYXRhYmFzZSogZGIpCiB7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRC
UmVxdWVzdCA9IDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBk
Yiwgb3BlbkRCUmVxdWVzdCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBv
YmplY3RTdG9yZU5hbWVzLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwg
SURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9k
ZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3Qp
CiB7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcg
SURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3Qp
KSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcg
SURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwg
ZGIsIG9wZW5EQlJlcXVlc3QpKSk7CiAgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgp
OwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CkBAIC04OCwxMCArODgsMTEg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZUxlZ2Fj
eSgpCiB9CiAKIAotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIs
IElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCitJREJUcmFuc2FjdGlvbjo6SURCVHJh
bnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFz
ZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBBY3RpdmVET01P
YmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9k
YXRhYmFzZShkYikKKyAgICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZU5hbWVzKQog
ICAgICwgbV9vcGVuREJSZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21vZGUobW9kZSkK
ICAgICAsIG1fYWN0aXZlKHRydWUpCkBAIC0xNTUsMTYgKzE1NiwxOSBAQCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcAogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1l
LCBlYyk7Ci0gICAgQVNTRVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2Ug
ZGlkbid0IGdldCBhIHN0b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNv
ZGUuIEFuZCB2aWNlIHZlcnNhLgotICAgIGlmIChlYykKKyAgICBpZiAoIWlzVmVyc2lvbkNoYW5n
ZSgpICYmICFtX29iamVjdFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAg
ICBBU1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2VuZCk7CiAKICAgICBjb25zdCBJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0gICAgSURC
RGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBt
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZW5kKCkpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1l
dGFkYXRhLmZpbmRPYmplY3RTdG9yZShuYW1lKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlk
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52
YWx1ZSwgb2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAg
IG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVj
dFN0b3JlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IDg5OTM5YmY4NTk3NWIxY2I5ZjdmNTBiNTE5N2Y5
ZjZhYzMxYmZjOTUuLmNiOGYwYjljMGIxNGQ2MTBmYjJiZGIzN2EzYzhiNjE2NGQ4YmU0NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5j
bHVkZSAiRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpAQCAtNTYsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZFUlNJT05fQ0hBTkdFID0g
MgogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElE
Qk9wZW5EQlJlcXVlc3QqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVz
LCBNb2RlLCBJREJEYXRhYmFzZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3Jl
TmFtZXMsIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1
YWwgfklEQlRyYW5zYWN0aW9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBt
b2RlUmVhZE9ubHkoKTsKQEAgLTEyMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVm
Q291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAg
IElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRC
UmVxdWVzdCopOworICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgTW9kZSwgSURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAKICAgICB2
b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBjbG9zZU9wZW5D
dXJzb3JzKCk7CkBAIC0xNDUsNiArMTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0
YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9y
ZU5hbWVzOwogICAgIElEQk9wZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKICAgICBjb25z
dCBNb2RlIG1fbW9kZTsKICAgICBib29sIG1fYWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcAppbmRleCBmMTY2NTE5NDliYWQzYzViMTUxYmViNGZmNzVmMjVkMDZiNzFhMjY2Li5kYzg3
MmE5MTc3YmFmOGM3YWIxMmU0NTQ2MzVlNDkwZjljNDEyZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmNwcApAQCAtMzksMTMgKzM5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKK1Bhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRl
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2RlLCBk
YXRhYmFzZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbChvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCBkYXRhYmFzZSkpOwogfQogCi1JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3Qq
IG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCogZGF0YWJhc2UpCi0gICAgOiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQorSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCisgICAgOiBtX29iamVjdFN0b3JlTmFtZXMo
b2JqZWN0U3RvcmVOYW1lcykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVz
ZWQpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQpAQCAtNTUsOCArNTUsNiBAQCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xp
c3QqIG9iamVjdFN0b3JlcwogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogICAg
ICwgbV9wZW5kaW5nRXZlbnRzKDApCiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVOYW1lcyk7
Ci0gICAgQVNTRVJUKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgfHwg
IW1fb2JqZWN0U3RvcmVOYW1lcy0+aXNFbXB0eSgpKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwogfQogCkBAIC02
NiwzMSArNjQsMjMgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwoKQogICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKIH0KIAotUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpIHsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICAvLyBEb2VzIGEgbGluZWFyIHNlYXJjaCwgYnV0IGl0IHJlYWxseSBz
aG91bGRuJ3QgYmUgdGhhdCBzbG93IGluIHByYWN0aWNlLgotICAgIGlmIChtX21vZGUgIT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFICYmICFtX29iamVjdFN0b3JlTmFtZXMtPmNvbnRh
aW5zKG5hbWUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1Rf
Rk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlLT5vYmplY3RTdG9y
ZShuYW1lKTsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSByaWdodCBub3cg
YmVhY3VzZSBhIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gY291bGQgbW9kaWZ5IHRoaW5ncwotICAg
IC8vICAgICAgICBiZXR3ZWVuIGl0cyBjcmVhdGlvbiAod2hlcmUgYW5vdGhlciBjaGVjayBvY2N1
cnMpIGFuZCB0aGUgLm9iamVjdFN0b3JlIGNhbGwuCi0gICAgLy8gICAgICAgIFRoZXJlJ3MgYSBi
dWcgdG8gbWFrZSB0aGlzIGltcG9zc2libGUgaW4gdGhlIHNwZWMuIFdoZW4gd2UgbWFrZSBpdCBp
bXBvc3NpYmxlIGhlcmUsIHdlCi0gICAgLy8gICAgICAgIGNhbiByZW1vdmUgdGhpcyBjaGVjay4K
LSAgICBpZiAoIW9iamVjdFN0b3JlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZS0+
b2JqZWN0U3RvcmUoaWQpOworICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9i
amVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9iamVjdFN0
b3JlKG1fZGF0YWJhc2UtPmdldE9iamVjdFN0b3JlSWQobmFtZSksIGVjKTsKK30KKwogYm9vbCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzaykKIHsKICAgICBpZiAobV9zdGF0
ZSA9PSBGaW5pc2hlZCkKQEAgLTEwMCw3ICs5MCw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhl
CiAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKICAgICBlbHNlCiAgICAgICAgIG1f
cHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgCisKICAgICBpZiAoYWJvcnRU
YXNrKQogICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDM0YTk3NTcwZjAwZmI3YTA4NGI4ZGQzODkzNDdhMjU0
YTI1MzQ4NjIuLmQ1ODJkNzNiMWE4YTA5NmY0N2E2NmMwMTVhYzBkZWExYmE2ZDYzNDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKQEAgLTQ1LDcgKzQ0LDcgQEAgY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShE
T01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFi
YXNlQmFja2VuZEltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKICAgICBzdGF0
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogZnJvbShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIGludGVyZmFjZSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4oaW50ZXJmYWNlKTsKQEAgLTU0LDYgKzUzLDcgQEAg
cHVibGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRf
dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fs
bGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3Mg
PSBjYWxsYmFja3M7IH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAgICAgZW51bSBTdGF0ZSB7CiAgICAgICAg
IFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KQEAgLTg5LDcgKzg5LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHRhc2tFdmVudFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4qKTsKICAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKIAotICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3JlTmFtZXM7CisgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1f
bW9kZTsKIAogICAgIFN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oCmluZGV4IGY3MDdmMzRhMDk5ODU0ZjQzOTIxODIzOTRhMmYxZTcyNWNlMDU3NGMuLmQxMWUx
ODExY2U0MzViZjY3ZjA4MzNkM2U1NTgwNmI4ODdjZTRlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3Jl
KGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBs
ZXRlVGFza0V2ZW50cygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAppbmRleCBh
NzViN2JlMTQyYjk2NWExNWQ2MDYwMzZmY2ZhZDI4YTA5MmM5YWVmLi5lN2I5ZmNhZmJiY2MwN2Q0
NjRlNmQ3Y2RjNzM5ZmU3MTZjZDUyMmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UuaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRh
YmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaApp
bmRleCBhNDkzMmVlMjgyNDAwNjJkMTU3ZmNkMDJhNTlhN2IyZjM3MGUxNzJiLi45YmQzNjY2MzQ4
ZTZjMDY1NGJkYjk0YzIwMmU1MDhhMjRjYTgwMTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlv
bkNvZGUmIGVjKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgdGhlIFdlYklEQlRyYW5zYWN0
aW9uIHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUs
IFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjMsNiArNjQsMTEgQEAgcHVibGljOgogICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisgICAgeworICAgICAgICBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2Jq
ZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0
b3JlLmgKaW5kZXggY2EwMTAzY2RhNmZjM2YzNzJjYWRjYWFiN2NkNmNlMzA1YTIyN2QyZS4uOGVh
OGRiODY2Zjg0MDc3MjgwY2Q0MzU5YzcyOGZhN2QyODM2MjBiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oCkBAIC01Niw2ICs1Niw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJREJLZXk+IFdlYkluZGV4S2V5
czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhjZXB0aW9u
Q29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQ
dXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0
IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleElkcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4
S2V5cz4mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFdlYklEQkNhbGxi
YWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBXZWJJREJJbmRleCogY3Jl
YXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wsIGJv
b2wsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpCkBAIC02OSwx
NCArNzAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdmlydHVh
bCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPGxvbmcg
bG9uZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+Jiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fTsKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJREJJbmRleCB0byB0aGUg
Y2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4KGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCiAgICAgewogICAgICAgICBXRUJLSVRfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklE
QkluZGV4KiBpbmRleChjb25zdCBsb25nIGxvbmcpCisgICAgeworICAgICAgICBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChsb25nIGxvbmcgaW5kZXhJZCwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJ
REJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgV2ViSURCQ2Fs
bGJhY2tzKiwgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNh
bGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4IDgxNmEzMjgxNDcwYjcyOTJm
NDNkNDRkMjMyZjMwM2M0ZmJiNWQ4NDYuLmJhYzJkYTg4ZDAzYTQwOWE5N2UxOTQ4MzdlZjRkMGJi
NzdmYTRiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURC
VHJhbnNhY3Rpb24uaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGljOgogICAgICAgICBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0
dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25nIGxvbmcsIFdlYkV4Y2VwdGlv
bkNvZGUmKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVU
YXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmNwcApp
bmRleCAyOWI4YzRiZjQxZGNhYWZhNjE5ZWI2YTBkMWExNTExMTRjMjkxZTUzLi4zYzcwYTAxNTAx
MTMyMmY4MWRmZDJmZDk2ZTI5ODNlNGUzZDA3YjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuY3BwCkBAIC04NSw2ICs4
NSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aQogICAgIG1fd2ViSURCRGF0YWJhc2UtPmRl
bGV0ZU9iamVjdFN0b3JlKG5hbWUsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2Fj
dGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OmRlbGV0ZU9i
amVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gVGhlIHRy
YW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94
eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25z
IG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJEYXRhYmFzZS0+ZGVs
ZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklE
QlRyYW5zYWN0aW9uKCksIGVjKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV93ZWJJREJEYXRhYmFz
ZSk7CkBAIC0xMDIsNiArMTEwLDE1IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJhbnNhY3Rpb24oCiAgICAgcmV0
dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFz
ZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElE
QkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYg
b2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKyAgICBPd25QdHI8V2Vi
SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gYWRvcHRQdHIobV93ZWJJREJEYXRhYmFzZS0+
dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lcywgbW9kZSkpOworICAgIGlmICghdHJhbnNhY3Rp
b24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRQcm94eTo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4p
CiB7CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oCmluZGV4IGZjODMxZThk
ZWM0OWE3OWU2MWNhN2NiY2VmNWI0NjdkMWM0YmQ1ZmQuLjU1OTIyZTg4NzlmZjIyYWU5OThjMTM2
ODAyYjBjNTQ0MzFhMDgyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaApAQCAtNDYsOCArNDYsMTAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24oV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWdu
ZWQgc2hvcnQgbW9kZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgdW5zaWduZWQgc2hvcnQgbW9kZSk7CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+
KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAppbmRleCAyYjliNDRhN2ExZmZjZGQ4MDIw
NzVlYTBkMzhlNmI3YzA3MTc0OGE1Li42YTBkMDI3NzJiODQ0YzdlZjZhYzIwZmJjZWMzY2MzMWQx
ZjM2MTQyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCkBAIC03Nyw2ICs3NywxNCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbAogICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dFdpdGhJbmRleEtleXMo
dmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+KHB1dE1v
ZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94
eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCBl
Yyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1
dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAg
ICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRl
ciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBpbXBs
ZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklEQk9i
amVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6
OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgaW5kZXhJZHMsIGluZGV4
S2V5cyk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7CiAgICAgLy8gVGhlIHRyYW5z
YWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBv
YmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTg3LDYgKzk1LDE0IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJwUHJp
bWFyeUtleSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Qcm94eS0+
Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKK3sK
KyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9p
bnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBp
bXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2Fz
dDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklE
Qk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgV2ViVmVjdG9yPGxvbmcg
bG9uZz4oaW5kZXhJZHMpLCBpbmRleEtleXMsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJU
cmFuc2FjdGlvbigpKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlv
biBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0
IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xMzAsNyArMTQ2LDE1IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW5kZXhOYW1lCiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0
byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKICAg
ICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmpl
Y3RzLgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0g
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Ci0g
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KGluZGV4TmFtZXMsICp0cmFu
c2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKKyAgICBtX3dlYklEQk9iamVj
dFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoV2ViVmVjdG9yPFdlYlN0cmluZz4oaW5kZXhOYW1lcyks
ICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKK30KKwordm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgaW5kZXhJZHMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0
byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAg
ICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmpl
Y3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0g
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Cisg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3Rvcjxsb25nIGxv
bmc+KGluZGV4SWRzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkp
OwogfQogCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC0xNDEsNiArMTY1LDE0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoY29uc3QgU3RyCiAgICAgcmV0
dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKIH0KIAor
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5OjppbmRleChpbnQ2NF90IGluZGV4SWQpCit7CisgICAgT3duUHRyPFdlYklEQkluZGV4
PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2JqZWN0U3RvcmUtPmluZGV4KGluZGV4SWQpKTsK
KyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSURCSW5kZXhC
YWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOworfQorCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUg
YSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xNDks
NiArMTgxLDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CCiAgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVs
ZXRlSW5kZXgoY29uc3QgaW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBUaGUgdHJh
bnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5
IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5k
ZWxldGVJbmRleChpbmRleElkLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rp
b24oKSwgZWMpOworfQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6b3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBU
aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBh
IHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKaW5kZXggODQ3
MGMxYWQ5MDViYzE1NmZkOWYzYjhmYzE0ZWZmMWU0MTFlOGJlYi4uNzkxMTNhZTk1NjVhMzE0ZGNj
ZjJiYWM3ODBlYmE3NTM5NGY2Y2RhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCkBAIC00NSwxNiArNDUsMjEg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+Jiwg
Y29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPGludDY0X3Q+JiwgY29uc3QgV1RGOjpWZWN0b3I8
SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+
LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJD
b3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJL
ZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0
IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPGludDY0
X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Kik7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKwog
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAg
ICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBv
cGVuQ3Vyc29yKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBXZWJDb3JlOjpJREJD
dXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmNwcAppbmRleCA4OGY5ODUyYWNlZjRjNmU4OWE1ODllNDUyNTllMjJiMWYzODZiMWU1Li5m
MDgzN2ZlZjZhNDZlMWYzYzRmZGIyOTk5MTQwZTNlYzdhYmEyZTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHku
Y3BwCkBAIC02Miw2ICs2MiwxNCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0bwogICAgIHJldHVy
biBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Y3JlYXRlKG9iamVjdFN0b3JlLnJlbGVhc2Uo
KSk7CiB9CiAKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6b2JqZWN0U3RvcmUoaW50NjRfdCBpbmRl
eElkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBPd25QdHI8V2ViSURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlID0gYWRvcHRQdHIobV93ZWJJREJUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmUo
aW5kZXhJZCwgZWMpKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShvYmplY3RTdG9y
ZS5yZWxlYXNlKCkpOworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Ojpjb21t
aXQoKQogewogICAgIG1fd2ViSURCVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgK
aW5kZXggN2U3NDg2YmQ3YzMyMDY2Y2MwMmQ2NzYxYzgwOTdjOWJjZGY1MzNlNS4uZThmMmMzMzc1
NDgzNGRlYmU0NDY5NGRlMDRmYjAxY2Q5ZWU0MTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCkBAIC00Miw2
ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eSgpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3Bw
CmluZGV4IGUwOWMxYTNmZWQyNDdkMmY1NWJlN2I5NzI1ZDVhMzkyNTNiNjk2NjYuLjhkMTJjZmEz
ZWE5YmFlMzJkNDdjMzM0ZmMwZTAxN2QwOTBkZGE3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xp
c3QuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kUHJveHkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKaW5kZXgg
ZTcxMDI5ZGViMzQ4NDcxNWIxMzBkM2ExYjhmY2QzZjYwOGNiMDZjYi4uNzM5MjlmZWQ3MzU4MGJl
MTg5MDNhZmVjMTQwMzYzOTQxMTRlN2UwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCkBAIC05MSw2ICs5MSwxNyBAQCBXZWJJREJU
cmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJET01T
dHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNhY3Rpb25JbXBsKHRy
YW5zYWN0aW9uKTsKIH0KIAorV2ViSURCVHJhbnNhY3Rpb24qIFdlYklEQkRhdGFiYXNlSW1wbDo6
dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLCB1bnNpZ25lZCBz
aG9ydCBtb2RlKQoreworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVMaXN0KG5hbWVzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bmFtZUxpc3RbaV0gPSBuYW1lc1tpXTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IG1fZGF0YWJhc2VCYWNrZW5kLT50cmFuc2FjdGlvbihu
YW1lTGlzdCwgbW9kZSk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG5ldyBXZWJJREJUcmFuc2FjdGlvbkltcGwodHJhbnNhY3Rpb24pOworfQor
CiB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6Y2xvc2UoKQogewogICAgIC8vIFVzZSB0aGUgY2Fs
bGJhY2tzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3Igc28gdGhhdCB0aGUgYmFja2VuZCBp
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaApp
bmRleCA3NjliZGY1ZDA1ZjBiM2JiMWU4YjY1ZjRlMDlmYzMyNzVlYmNhODYwLi4wOTYwZjYxYjQ4
MmYxNTY5MGI1Y2MzMzBjNjZjYmMwYTQyOGQ3MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmly
dHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgV2ViU3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxs
YmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQk1ldGFkYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
Qk1ldGFkYXRhLmNwcAppbmRleCBkZDFjMmM4ZTU0MGZmZWJiMzg4YWQyY2MxMzZiOGNlYmZmMDlk
Y2I3Li4yY2E1YmY3YzdkNmIyOWMyZTJhMDZmYmVmYzY4NmM1MmVhOGM2YzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCkBAIC00OSw2ICs0OSw3
IEBAIFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBzdG9yZUl0ZXJhdG9yID0gbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmJlZ2luKCk7IHN0b3JlSXRlcmF0b3IgIT0gbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmVuZCgpOyArK3N0b3JlSXRlcmF0b3IpIHsKICAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgT2Jq
ZWN0U3RvcmUgd2ViT2JqZWN0U3RvcmU7CisgICAgICAgIHdlYk9iamVjdFN0b3JlLmlkID0gb2Jq
ZWN0U3RvcmUuaWQ7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLm5hbWUgPSBvYmplY3RTdG9yZS5u
YW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5rZXlQYXRoID0gb2JqZWN0U3RvcmUua2V5UGF0
aDsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLmF1
dG9JbmNyZW1lbnQ7CkBAIC01OSw2ICs2MCw3IEBAIFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRh
ZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICAg
ICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsgaW5kZXhJdGVyYXRv
ciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2luZGV4SXRlcmF0b3IpIHsKICAgICAg
ICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5kZXhJdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgICAgICBJbmRleCB3ZWJJbmRleDsKKyAgICAgICAgICAgIHdlYkluZGV4Lmlk
ID0gaW5kZXguaWQ7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAg
ICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRoOwogICAgICAgICAgICAg
d2ViSW5kZXgudW5pcXVlID0gaW5kZXgudW5pcXVlOwpAQCAtNzksOSArODEsOSBAQCBXZWJJREJN
ZXRhZGF0YTo6b3BlcmF0b3IgSURCRGF0YWJhc2VNZXRhZGF0YSgpIGNvbnN0CiAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViT2JqZWN0U3RvcmUuaW5kZXhlcy5zaXplKCk7ICsraikg
ewogICAgICAgICAgICAgY29uc3QgSW5kZXggd2ViSW5kZXggPSB3ZWJPYmplY3RTdG9yZS5pbmRl
eGVzW2pdOwogICAgICAgICAgICAgSURCSW5kZXhNZXRhZGF0YSBpbmRleCh3ZWJJbmRleC5uYW1l
LCB3ZWJJbmRleC5pZCwgd2ViSW5kZXgua2V5UGF0aCwgd2ViSW5kZXgudW5pcXVlLCB3ZWJJbmRl
eC5tdWx0aUVudHJ5KTsKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4
Lm5hbWUsIGluZGV4KTsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4
LmlkLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICAgICAgZGIub2JqZWN0U3RvcmVzLnNldChvYmpl
Y3RTdG9yZS5uYW1lLCBvYmplY3RTdG9yZSk7CisgICAgICAgIGRiLm9iamVjdFN0b3Jlcy5zZXQo
b2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsKICAgICB9CiAgICAgcmV0dXJuIGRiOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25J
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1w
bC5jcHAKaW5kZXggNWNiYmVlNjYzNGEzYmZmMTk0NzBkNmY3OWIwYWFmNGFiODcwNGMwZi4uNjYx
NmQ2NzFmYzMwYzk3ZTY3MjYxNGMxYTQxOTllM2E3ZDA4ODU3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC01NSw2
ICs1NSwxNCBAQCBXZWJJREJPYmplY3RTdG9yZSogV2ViSURCVHJhbnNhY3Rpb25JbXBsOjpvYmpl
Y3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIEV4YwogICAgIHJldHVybiBuZXcgV2ViSURC
T2JqZWN0U3RvcmVJbXBsKG9iamVjdFN0b3JlKTsKIH0KIAorV2ViSURCT2JqZWN0U3RvcmUqIFdl
YklEQlRyYW5zYWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUobG9uZyBsb25nIGluZGV4SWQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShpbmRleElkLCBlYyk7Cisg
ICAgaWYgKCFvYmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBX
ZWJJREJPYmplY3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOworfQorCiB2b2lkIFdlYklEQlRyYW5z
YWN0aW9uSW1wbDo6Y29tbWl0KCkKIHsKICAgICBtX2JhY2tlbmQtPmNvbW1pdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAppbmRl
eCA2NmUzMTUzMDAwZTczYjBjZWI3NGU4N2EyN2Y3ODlmYmIyZGZhNzMzLi4xZWU2YWI4MDE5N2Vm
NzhmYWZhMTNlOTZmZDA1ZjcwZjM3YmFkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaApAQCAtMzksOSArMzksMTAgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJJREJUcmFuc2FjdGlvbkltcGw6IHB1YmxpYyBXZWJJ
REJUcmFuc2FjdGlvbiB7CiBwdWJsaWM6CiAgICAgV2ViSURCVHJhbnNhY3Rpb25JbXBsKFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAg
ICB2aXJ0dWFsIH5XZWJJREJUcmFuc2FjdGlvbkltcGwoKTsgIAorICAgIHZpcnR1YWwgfldlYklE
QlRyYW5zYWN0aW9uSW1wbCgpOwogCiAgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2Jq
ZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAg
dmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUobG9uZyBsb25nIGluZGV4SWQs
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7CiAgICAgdmly
dHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFz
ZUJhY2tlbmRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJh
c2VCYWNrZW5kVGVzdC5jcHAKaW5kZXggODkzNjNmMDA3NzQ0ZDQwNjI4ZGI1ODZjZTk3YmM0Nzcx
M2ZiZWZhZS4uYzI0ZTU0NDVjYTJlZDJlNTlhOGI2NDI3YmUxOWY2NGM5ZTM4NGM3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2Vu
ZFRlc3QuY3BwCkBAIC0xNTIsOCArMTUyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkRh
dGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBJREJEYXRhYmFzZU1ldGFk
YXRhKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgeyB9CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3Ry
aW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYsIHVuc2lnbmVk
IHNob3J0IG1vZGUpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171339</attachid>
            <date>2012-10-29 17:09:42 -0700</date>
            <delta_ts>2012-10-29 17:32:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121029170808.patch</filename>
            <type>text/plain</type>
            <size>113745</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDdkZWRlOTdkNjg4Yjc1
YTM0MDdlMDIwYWZiOGNlZDYxNGI4YmMzMS4uOGI1ZjBiMWYzYmIwM2Y0YWQ3ODk5MDg4YTU0NjRi
YTZhZjk0OGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI5ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBUZXh0IHdpdGggemVybyBmb250IHNp
emUgcmVuZGVycyBhcyBYIHB4IHNvbWV0aW1lcywgY2F1c2luZyBmYXN0L3RleHQvemVyby1mb250
LXNpemUtMi5odG1sIHRvIGZhaWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjJkNDUx
ZGMwNTlhOGQyYjM0ZjRmMDU3N2U5Y2FhZTBjOWUzMjgzYi4uZDIwODFkODY4MmM5ZGVkNTQ0Zjdl
ZTRiNDBmMTFiNGJjM2JmYmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MSBAQAorMjAxMi0xMC0yNSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBhZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJh
Y2tlbmQgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ2hyb21pdW0gUHJveHkgYW5kIFdlYklEQiogc3VwcG9ydCBmb3IgbmV3IGludDY0X3QtYmFz
ZWQgbWV0aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6
cHV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbjo6
b2JqZWN0U3RvcmUpOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJh
Y2tlbmRQcm94eTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kUHJveHkpOgorICAgICAgICAq
IHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVh
ZHkpOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgp
OgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5k
ZXgpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAg
ICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5OjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAg
ICAgICogc3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0
YWRhdGE6OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFu
c2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGw6
Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYklEQlRy
YW5zYWN0aW9uSW1wbC5oOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3Qu
Y3BwOgorCiAyMDEyLTEwLTI5ICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYnVnQGdtYWls
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZTogbWFrZSBjcHUtbW9uaXRv
cmluZyBmZWF0dXJlIGF2YWlsYWJsZSBvbmx5IG9uIGNhcGFibGUgYnJvd3NlcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggYzM5NDA2
OGM1Mjc5NTBjNzAwMDA3OGE1Y2Q0NDU0M2RkNDIwOWI5ZS4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5
NzViYjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJh
Y2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCkBAIC02Nyw3ICs2Niw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEZyb20gSURCRmFjdG9yLmRlbGV0ZURhdGFiYXNlKCksIElEQk9i
amVjdFN0b3JlL0lEQkluZGV4LmdldCgpLCBJREJPYmplY3RTdG9yZS5kZWxldGUoKSwgSURCT2Jq
ZWN0U3RvcmUuY2xlYXIoKQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSA9IDA7Ci0gICAg
CisKICAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUoKQogICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7CiAgICAg
Ly8gRnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAyYzkxZDcyZjdlZGZj
MjZiMmM0MjMzNmM3NTlkOGU0ZmNhNTlhMDg4Li5mY2NiNDU2YzVkNjhhMjE0NjdmNThmMDljZGM2
MjdmYzMwZmQ5NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVz
LT5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+
dmFsdWUubmFtZSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBv
YmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0
aFN0cmluZyk7CiAgICAgfQogCi0gICAgaWYgKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG5hbWUpKSB7CisgICAgaWYgKG1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShuYW1l
KSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDcgKzE3MCw3IEBAIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvCiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUs
IG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBvYmplY3RT
dG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG1ldGFkYXRhKTsKKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKICAgICAr
K21fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZDsKIAogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwpAQCAtMTg3LDcg
KzE4Nyw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisKKyAg
ICBpbnQ2NCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7
CisgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewogICAg
ICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUp
OwotICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKICAgICB9CiB9
CiAKQEAgLTI0MSw2ICsyNDMsMTMgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0
YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yZU5hbWVz
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc09iamVj
dFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNh
Y3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBP
cGVyYXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBh
dCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKICAg
ICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCkBAIC0yNTAsNyArMjU5
LDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwg
bW9kZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCAqc3RvcmVO
YW1lcywgbW9kZSwgdGhpcyk7CiAgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3Mo
dHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGMzNmQ4YzMyOWEwZWZmOGI2YmJlNWUxZGNhYjEz
ODE1ZWRlNGExNTMuLjdkYTU0MzJkMzgyYzFiNGUwOGRlNWViYTViODA5NmM2NGRiZjU0NmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xNjcsMTMgKzE2NywxMyBAQCBJREJEYXRhYmFzZU1l
dGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwog
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsK
KyAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52
YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCiBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworICAgIEFTU0VSVCghbV9v
YmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKSk7
CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CkBAIC0xOTMsNyArMTkz
LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICBtX29iamVj
dFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVs
ZWFzZSgpOwogfQogCkBAIC0yMDcsMTcgKzIwNywyNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1QYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBp
ZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIHJldHVybiBt
X29iamVjdFN0b3Jlcy5nZXQoaWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbnQ2NF90
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAg
Zm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5Owor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAog
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RT
dG9yZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMjI3LDcgKzIzNyw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgbV9vYmplY3RTdG9yZXMucmVtb3Zl
KGlkKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQpAQCAtNDIxLDIwICs0MzEsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5nT3BlbkNhbGxz
LmlzRW1wdHkoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiwgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
b2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7CisgICAgLy8gRklYTUU6IEZpcnN0IHBhcmFt
ZXRlciBpc24ndCB1c2VkIGZvciBhbnl0aGluZyB5ZXQgYW55d2F5LCBhbmQgdGhpcyBtZXRob2Qg
aXMgZ29pbmcgYXdheS4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoVmVjdG9yPGludDY0
X3Q+KCksIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpCit7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRz
LCBtb2RlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUuZ2V0KCkpOwpAQCAtNjExLDIxICs2MjAsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YT4gb2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21l
dGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNp
emUoKTsgaSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLm5h
bWUsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNb
aV0pKTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOwog
fQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1h
cChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBP
YmplY3RTdG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworICAgIEFTU0VSVChkYXRh
YmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPmlkKCkpKTsKKyAgICBk
YXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAog
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQog
ewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZVB0ciA9
IG9iamVjdFN0b3JlOwotICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlUHRyLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3JlUHRyLT5uYW1lKCksIG9iamVjdFN0b3JlUHRyKTsKKyAgICBBU1NF
UlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+aWQo
KSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPmlk
KCksIG9iamVjdFN0b3JlUHRyKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBp
bnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCAxMWE2OWQw
YmZkYTY2YjA2MjAxZDM5NjNjMGVlMTQ0YWI4OGUzNWU4Li5mNWNlODFkNmNiNDE1ZTM5ZTIxYTQ1
NWEyMjAyMjkxMTQ0YmYzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC02MiwxMiArNjIsMTUg
QEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1
YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUoZ2V0T2JqZWN0U3RvcmVJZChuYW1l
KSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0KTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUoaW50NjRfdCBpZCk7CisgICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25D
b29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKQEAgLTEwMCw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZh
Y3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0
ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW1wbD4gbV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+
IE9iamVjdFN0b3JlTWFwOwogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAg
ICAgT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNGNkMDg0NWI0MzZiMjc0ODdi
MWRjMTU3YTE4ODE3ZDFmYmUxN2M0OS4uMGM1M2NkN2NmMTU4OTFjMDUxN2ZkOTMyNDM5Y2UxYjdh
MTkxOTdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU2LDggKzU2LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdM
aXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggODUzNTc1N2YyMDY1NTE3MDE1Yjgx
MDQxZmUxMmM2YTA2NTk0ZDZiMS4uZTc4OTEzYmEwNGNiYmM3MzMyMjgzZjA1ZjRiYWFhNTAwMGIz
ZTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKaW5kZXggNDIxOTE1NzkyNTkzNjcy
OTE2YmY3OTkwNTU4ODU1MzlkOGUyNmY2Yy4uZDBlNzRkNTc0MWY2MjU3ZjgwNGU3OTg1Y2VlNmEz
MzIzNDg3ZDM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBJREJGYWN0b3J5X2gKICNkZWZpbmUg
SURCRmFjdG9yeV9oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0OTA5MTYyM2Q4ZGUyM2Y5
YTg3NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4YjgxM2E3YmExMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAtNTcsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4o
MCksIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMp
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3Blbktl
eUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0K
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlv
biwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAwNzYxZjA2ODFi
YmM5ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRl
Zjg4YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDYzNTFlNmZiOGU3NzAwMjYyZjZkYzM1ZGYwMzEyMDk4
MTNiMjA5ZDAuLmJhYzhjZWEwNjVmYzgwZDc3ZWIyNWFhMmFiZWNhYzIxMzYwOTQ4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggNzY4ZWJiYWY0
YTYzNjE5OWI5ZGEwMDI2N2UyYzBkNDc2ZGM5YjgwYS4uMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQx
OTI4NTcyYzljMmIxNjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTWV0YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJNZXRhZGF0YS5oCkBAIC0zOCwzNyArMzgsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFk
YXRhOwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7Ci0gICAgLy8gRklYTUU6IFRoZXNl
IGNhbiBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgotICAgIGVudW0gewotICAgICAgICBO
b0ludFZlcnNpb24gPSAtMSwKLSAgICAgICAgRGVmYXVsdEludFZlcnNpb24gPSAwCi0gICAgfTsK
LQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQotICAgICAgICA6IGludFZlcnNpb24oTm9JbnRW
ZXJzaW9uKQotICAgIHsKLSAgICB9Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRW
ZXJzaW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0
YSB7CisgICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQorICAgIElEQkluZGV4TWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogICAgICAgICA6IG5hbWUobmFtZSkKICAgICAg
ICAgLCBpZChpZCkKLSAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgaW50VmVy
c2lvbihpbnRWZXJzaW9uKQotICAgICAgICAsIG1heE9iamVjdFN0b3JlSWQobWF4T2JqZWN0U3Rv
cmVJZCkKLSAgICB7Ci0gICAgfQotCisgICAgICAgICwga2V5UGF0aChrZXlQYXRoKQorICAgICAg
ICAsIHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KSB7IH0K
ICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIFN0cmluZyB2ZXJzaW9uOwot
ICAgIGludDY0X3QgaW50VmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7Cisg
ICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJvb2wgdW5pcXVlOworICAgIGJvb2wgbXVsdGlF
bnRyeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+IE9iamVjdFN0b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKyAg
ICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIH07CiAKIHN0cnVjdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIHsKQEAgLTg3LDIzICs3MSw2NiBAQCBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSB7CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50OwogICAgIGludDY0X3QgbWF4
SW5kZXhJZDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkluZGV4TWV0YWRhdGE+
IEluZGV4TWFwOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwog
ICAgIEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9
OwogCi1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5kZXhNZXRhZGF0YSgpIHsg
fQotICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQor
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1FOiBUaGVzZSBjYW4gcHJv
YmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAgICAgICAgTm9JbnRWZXJz
aW9uID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAorICAgIH07CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3Rv
cmVNYXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAgICAgOiBpbnRWZXJzaW9u
KE5vSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQogICAgICAgICA6IG5hbWUo
bmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgpCi0gICAg
ICAgICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50cnkpIHsg
fQorICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBpbnRWZXJzaW9uKGludFZl
cnNpb24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RTdG9yZUlkKQorICAg
IHsKKyAgICB9CisKKyAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlKG5hbWUp
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKICAgICBTdHJp
bmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIElEQktleVBhdGgga2V5UGF0aDsKLSAgICBi
b29sIHVuaXF1ZTsKLSAgICBib29sIG11bHRpRW50cnk7CisgICAgU3RyaW5nIHZlcnNpb247Cisg
ICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKKwor
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBmYzY1
NzNhMThhMjg2ZWMwYTYyNWNmNmE1NWRmNjUyZTFhZDdhYmEzLi5kOWQyZWMyODA0OTU5NGUyNzA4
OGQxZmZjZmQyMzIxNjk3NjUxNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIFBhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKICAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOworICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIGluZGV4TmFtZXMtPnNvcnQo
KTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDksNyArMjA5LDcg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5k
ZXhLZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVl
LCB2YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgICAgICBpbmRleEtl
eXMuYXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBp
bmRleE5hbWVzLnNpemUoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQKICAgICAgICAgZWMgPSBOQVRJVkVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICBpZiAobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
aWYgKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpAQCAtNDA5LDcgKzQwOSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgSURCSW5k
ZXhNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOwogICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1l
dGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgbV9tZXRhZGF0YS5pbmRl
eGVzLnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRl
eElkLCBtZXRhZGF0YSk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCkBAIC00NDQs
MTUgKzQ0NCwyNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChu
YW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlk
bid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2Rl
LiBBbmQgdmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRh
aW5zSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0
YS5pbmRleGVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJh
Y2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYmIGlu
ZGV4QmFja2VuZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgw
KTsKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUp
IHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworCisg
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRh
dGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQpAQCAtNDY3LDIxICs0NzYsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7CisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKKyAgICAgICAgQVNTRVJU
KG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAgIElEQkluZGV4TWFwOjpp
dGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
aW5kZXhNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUo
aXQtPnZhbHVlLT5pZCgpKTsKICAgICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsK
ICAgICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSk7Ci0gICAgICAgIG1f
bWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCmluZGV4IDIzYTMzNjdmNGMzYjU2MzgzNmU1NWFjNDk4ZDc1NzYxZDIwMTA0
NDYuLmQ2YjYzZDgzMjk2MmU2Y2UxZWRjM2JmMzBhNDM2OTBmZjllNzNmYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtMTA3LDcg
KzEwNiw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBAIC0xMTgsMTYgKzExNywyMCBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhO
YW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CisgICAgT3du
UHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3Rvcjxp
bnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0lu
ZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKIAog
ICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKIAogICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2Uo
KSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhJZHMucmVs
ZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9B
Qk9SVF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRo
SW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJu
IHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0aW9u
UHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKK30KIG5hbWVzcGFjZSB7
CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0xNTcsOCArMTYwLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlz
KGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CisgICAgYm9vbCB3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7CisgICAgICAgIGludDY0X3QgaW5k
ZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFiYWNraW5nU3Rv
cmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjgsOCArMTcyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZhdGU6CiAKICAgICBib29sIGFkZGlu
Z0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkzLDEzICsxOTUsMTMgQEAgcHJpdmF0
ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtl
eVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlz
LCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJy
b3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5
V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMs
IFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgpID09IGluZGV4S2V5cy5z
aXplKCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNpemUoKSk7
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFtZXNbaV0s
IGluZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGlu
ZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNC
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgewogCkBA
IC0yMjgsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4
TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
cikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4
S2V5cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwpA
QCAtMjQzLDcgKzI0NSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAKICAgICBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgdGhpcywgcHJpbWFy
eUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9y
TWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMs
IHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAm
ZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBkZWFsIHdpdGggZXJy
b3JNZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25seSBmYWlscyBvbiB1bmlxdWVuZXNz
IGNvbnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIkR1
cGxpY2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAg
ICByZXR1cm47CkBAIC0yNTEsNDYgKzI1Myw2OCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgp
OwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQsIG1faW5kZXhlcy5nZXQoaW5k
ZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRl
ci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKmJhY2tpbmdTdG9yZSgp
LCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBt
X21ldGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJm
YWNlKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5h
bWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBp
bmRleElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOworICAgIHJldHVybiBzZXRJbmRleEtl
eXMocHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb25QdHIpOwor
fQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKIAotICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMp
KTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVt
cHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIG5hbWVz
LnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQoreworICAg
IFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7CisgICAgLy8gRklY
TUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4gaWYg
dGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8gcmVt
b3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxsIGdv
IGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2
IGxhbmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKKyAgICAgICAgZm9yIChJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRl
eGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0g
aW5kZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtleTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVyZmFj
ZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
cG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4
TmFtZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IGluZGV4SWRz
ID0gcG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy0+c2l6
ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVu
dCgpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJh
bnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
T3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5h
bWVzID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJ
ZHMgPSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtl
eXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMgJiYgaW5kZXhLZXlzICYm
IGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CisgICAgQVNTRVJUKGlu
ZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6
ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAKQEAgLTMxNCw3
ICszMzgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJ
bmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAg
ICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBr
ZXksIGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleElkcywg
KmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzMwLDcgKzM1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAg
ICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0
KCksICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
bV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmlu
ZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRl
eEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKSkgewogCiAgICAgICAgICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRh
IHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKGVy
cm9yKTsKQEAgLTM3Myw3ICszOTcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgICAg
ICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+
dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPmtleSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcgKzQzNCw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhl
cy5jb250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICVzIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFpbnMo
aWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgp
ID09IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Miw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgp
OworICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQogCkBAIC00NDIsMjIgKzQ2Niw0MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhcwog
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgo
aW50NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFTU0VSVChpbmRleCk7CiAgICAgcmV0
dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIGluZGV4
KGdldEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoSW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5l
bmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0X3Q+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKIHsKLSAg
ICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBWZWN0b3I8aW50NjRfdD4g
cmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgo
aW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRh
aW5zKGluZGV4SWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gbV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTQ2Nyw3ICs1MTEsMTIgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQlRyYW5zYWN0aW9uQmEKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1f
aW5kZXhlcy5yZW1vdmUobmFtZSk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBkZWxldGVJbmRleChnZXRJbmRleElk
KG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCkBAIC01NDEsMjAgKzU5MCwyMCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAgICBWZWN0b3I8SURCSW5kZXhN
ZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQo
KSwgbV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5uYW1lLCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOwor
ICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6
OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIEFTU0VSVChv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkpKTsKLSAgICBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKKyAgICBBU1NFUlQob2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOworICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewogICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+aWQoKSkpOworICAgIG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5pZCgpLCBpbmRleFB0cik7CiB9CiAKIFBh
c3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpAQCAtNTcz
LDcgKzYyMiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrCiAgICAgYmFja2luZ1N0b3JlKCkt
Pm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5k
ZXggOTA4ZTdmMjM4ZWZmMDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVjYS4uYzJlZmQzYjBlM2Ey
MWI2MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApA
QCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOwotICAgIAorICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKKwogICAg
IHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0CiAgICAgewpAQCAtNjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aElu
ZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURC
S2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3Jl
YXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7CkBAIC04NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBjb25z
dCBib29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5j
cmVtZW50OyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9
Ci0gICAgCisKKyAgICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7CisgICAgVmVj
dG9yPGludDY0X3Q+IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKIHByaXZh
dGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCkBAIC05OCw5ICsxMDcs
OSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50
KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBh
c3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKICAgICBzdGF0aWMg
dm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7Ci0gICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NP
d25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5hbWVzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBj
bGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaAppbmRleCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkwNjM4ODFmMWQ0OGQ2OGRk
Li45YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAogICAgIHZpcnR1YWwg
dm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuY3BwCmluZGV4IGUwNzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4YWVlNDc3NzQxY2EuLmIy
MzkwMTYxOWJjYTNhMTA5YWZhNmQyNWE4YThkN2U1ZWY3ODI0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKGludDY0
X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAgbV9kYXRhYmFzZUNhbGxi
YWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cyA9IDA7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNh
Y3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFja2Vu
ZCwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhp
cyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbkJhY2tlbmQsIFZl
Y3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJh
c2UuZ2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZy
b250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gZnJvbnRlbmQ7CiAgICAgbV9yZXN1
bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAxODYwYmZjNTll
M2NhMzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4Li5jNmM2ZTNlMzhmOWFjYTYwNDUzNTBlNzNi
NTIyNzE2ZDBiYzFmM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNr
ZW5kCiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwogICAg
IGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlv
biA9IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbiAm
JiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihE
T01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUg
dW51c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhlYzE1ZTVlYzA3M2Rm
ZmIxZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjQ3MDA1YzNiNzYxZTIwYzI1ZjA4OTEyMWM0NjM3
ZjMwYmE4NzNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUs
IElEQkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIpCiB7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCA9IDA7Ci0g
ICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVz
dCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVz
LCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElE
QlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVz
dCogb3BlbkRCUmVxdWVzdCkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiB7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpKSk7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVl
c3QpKSk7CiAgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CkBAIC04OCwxMCArODgsMTEgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZUxlZ2FjeSgpCiB9CiAKIAotSURC
VHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJ
REJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVl
c3QqIG9wZW5EQlJlcXVlc3QpCitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5h
bWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5E
QlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9kYXRhYmFzZShkYikKKyAg
ICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZU5hbWVzKQogICAgICwgbV9vcGVuREJS
ZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fYWN0aXZl
KHRydWUpCkBAIC0xNTUsMTYgKzE1NiwxOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJ
REJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAg
IGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0
U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7Ci0gICAgQVNT
RVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0
b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgotICAgIGlmIChlYykKKyAgICBpZiAoIWlzVmVyc2lvbkNoYW5nZSgpICYmICFtX29iamVj
dFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tl
bmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYm
IG9iamVjdFN0b3JlQmFja2VuZCk7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZW5kKCkpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFkYXRhLmZpbmRPYmpl
Y3RTdG9yZShuYW1lKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3Rv
cmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5oCmluZGV4IDg5OTM5YmY4NTk3NWIxY2I5ZjdmNTBiNTE5N2Y5ZjZhYzMxYmZjOTUuLmNi
OGYwYjljMGIxNGQ2MTBmYjJiZGIzN2EzYzhiNjE2NGQ4YmU0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtMzAsNyArMzAs
NiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTYsOCAr
NTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZFUlNJT05fQ0hBTkdFID0gMgogICAgIH07CiAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1v
ZGUsIElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3Qq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBNb2RlLCBJREJEYXRh
YmFzZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIE1vZGUsIElE
QkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsK
QEAgLTEyMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOworICAg
IElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgTW9kZSwg
SURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAKICAgICB2b2lkIGVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC0x
NDUsNiArMTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJh
c2U7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIElE
Qk9wZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKICAgICBjb25zdCBNb2RlIG1fbW9kZTsK
ICAgICBib29sIG1fYWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBmMTY2
NTE5NDliYWQzYzViMTUxYmViNGZmNzVmMjVkMDZiNzFhMjY2Li5lMTY1MmQ2OTVkZjg1MzQxYjM2
MDg2ZDg2NzliMTM3NDQwMmZmOGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
MzksMTMgKzM5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
RE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3Jl
SWRzLCBtb2RlLCBkYXRhYmFzZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAg
OiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQorSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFzZShk
YXRhYmFzZSkKQEAgLTU1LDggKzU1LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMKICAgICAs
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKICAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQog
ewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOwotICAgIEFTU0VSVChtX21vZGUgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlz
RW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRD
cmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKIH0KIApAQCAtNjYsMzEgKzY0LDIzIEBAIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGludDY0X3QgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9J
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRG9l
cyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxkbid0IGJlIHRoYXQgc2xvdyBp
biBwcmFjdGljZS4KLSAgICBpZiAobV9tb2RlICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRy
YW5zYWN0aW9uIGNvdWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMg
Y3JlYXRpb24gKHdoZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9y
ZSBjYWxsLgotICAgIC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3Np
YmxlIGluIHRoZSBzcGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAg
IC8vICAgICAgICBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKGlkKTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9
CiAKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIHJldHVybiBvYmplY3RTdG9yZShtX2RhdGFiYXNlLT5nZXRPYmpl
Y3RTdG9yZUlkKG5hbWUpLCBlYyk7Cit9CisKIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCkBAIC0xMDAs
NyArOTAsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhU
YXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZQogICAgICAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQodGFzayk7CiAgICAgZWxzZQogICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBw
ZW5kKHRhc2spOwotICAgIAorCiAgICAgaWYgKGFib3J0VGFzaykKICAgICAgICAgbV9hYm9ydFRh
c2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRl
eCAzNGE5NzU3MGYwMGZiN2EwODRiOGRkMzg5MzQ3YTI1NGEyNTM0ODYyLi40ZTRkZGVjYzExMjM2
OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBA
IC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmgiCkBAIC00NSw3ICs0NCw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqKTsKICAgICBzdGF0aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogZnJvbShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGludGVyZmFjZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4oaW50ZXJmYWNlKTsK
QEAgLTU0LDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFj
a3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGlj
OgogICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1
bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAKICAgICBlbnVt
IFN0YXRlIHsKICAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0LgpA
QCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGFza0V2ZW50VGltZXJGaXJlZChU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vy
c29ycygpOwogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsK
KyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBmNzA3ZjM0YTA5OTg1NGY0MzkyMTgyMzk0YTJmMWU3
MjVjZTA1NzRjLi5kMTFlMTgxMWNlNDM1YmY2N2YwODMzZDNlNTU4MDZiODg3Y2U0ZTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6
CiAgICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgKaW5kZXggYTc1YjdiZTE0MmI5NjVhMTVkNjA2MDM2ZmNmYWQyOGEwOTJjOWFlZi4u
ZTdiOWZjYWZiYmNjMDdkNDY0ZTZkN2NkYzczOWZlNzE2Y2Q1MjJjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklEQkRhdGFiYXNlLmgKaW5kZXggYTQ5MzJlZTI4MjQwMDYyZDE1N2ZjZDAyYTU5YTdiMmYzNzBl
MTcyYi4uZjAyYmJmNDRjNDQ3ZDU3MDhhZjlkNDM3ZWFjZjk1ZjhkNDgwNmVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC01Niw2ICs1
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lv
biwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2Yg
dGhlIFdlYklEQlRyYW5zYWN0aW9uIHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVu
c2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjMsNiArNjQsMTEg
QEAgcHVibGljOgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisg
ICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCkgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQk9iamVjdFN0b3JlLmgKaW5kZXggY2EwMTAzY2RhNmZjM2YzNzJjYWRjYWFiN2Nk
NmNlMzA1YTIyN2QyZS4uOGVhOGRiODY2Zjg0MDc3MjgwY2Q0MzU5YzcyOGZhN2QyODM2MjBiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9y
ZS5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJ
REJLZXk+IFdlYkluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlz
KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1v
ZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtl
eXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBj
b25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleElkcywgY29uc3Qg
V2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9u
Q29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViSURC
S2V5UGF0aCYsIGJvb2wsIGJvb2wsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpCkBAIC02OSwxNCArNzAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+
JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZl
Y3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfTsKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBX
ZWJJREJJbmRleCB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCiAgICAgewogICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KyAgICB2aXJ0dWFsIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBsb25nIGxvbmcpCisgICAgewor
ICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChsb25n
IGxvbmcgaW5kZXhJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2Rl
JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3Bl
bkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChjb25zdCBXZWJJREJL
ZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4
IDgxNmEzMjgxNDcwYjcyOTJmNDNkNDRkMjMyZjMwM2M0ZmJiNWQ4NDYuLmJhYzJkYTg4ZDAzYTQw
OWE5N2UxOTQ4MzdlZjRkMGJiNzdmYTRiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGlj
OgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25n
IGxvbmcsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcAppbmRleCAyOWI4YzRiZjQxZGNhYWZhNjE5ZWI2YTBkMWExNTExMTRj
MjkxZTUzLi5mNmQ5NjQ0NzBlZmI0MTUxNDRmZGMxZDA0MDgyOTA5Y2RjZDhlNTA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHkuY3BwCkBAIC04NSw2ICs4NSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aQogICAgIG1f
d2ViSURCRGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kUHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBh
IHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBh
bGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93
ZWJJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgKnRyYW5zYWN0
aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KKwogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRQcm94eTo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NF
UlQobV93ZWJJREJEYXRhYmFzZSk7CkBAIC0xMDIsNiArMTEwLDE1IEBAIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJh
bnNhY3Rpb24oCiAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUo
dHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQor
eworICAgIE93blB0cjxXZWJJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0ciht
X3dlYklEQkRhdGFiYXNlLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSkpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4pCiB7CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5o
CmluZGV4IGZjODMxZThkZWM0OWE3OWU2MWNhN2NiY2VmNWI0NjdkMWM0YmQ1ZmQuLjkxNmY4MzNh
YjdlZmJmY2Q0MDY2MWVkYTc3ZmE5YWM5NTM4ZGM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaApAQCAtNDYsOCArNDYs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogc3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0
IG1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggMmI5
YjQ0YTdhMWZmY2RkODAyMDc1ZWEwZDM4ZTZiN2MwNzE3NDhhNS4uNmEwZDAyNzcyYjg0NGM3ZWY2
YWMyMGZiY2VjM2NjMzFkMWYzNjE0MiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNzcsNiArNzcs
MTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5w
dXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3Jl
OjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwg
KnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMs
IHdlYkluZGV4S2V5cywgZWMpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMpCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwK
KyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBv
YmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5
ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdl
YklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCks
IGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewog
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC04Nyw2ICs5NSwx
NCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0
SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFu
dGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJl
ciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94
eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblBy
b3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlv
bik7CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXks
IFdlYlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgaW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Q
cm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAv
LyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0
byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDcgKzE0NiwxNSBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZQogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCiAgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShp
bmRleE5hbWVzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cisg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJp
bmc+KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFk
eShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShX
ZWJWZWN0b3I8bG9uZyBsb25nPihpbmRleElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJ
REJUcmFuc2FjdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQxLDYgKzE2NSwxNCBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNv
bnN0IFN0cgogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQoreworICAgIE93
blB0cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5p
bmRleChpbmRleElkKSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJl
bmRlcmVyLApAQCAtMTQ5LDYgKzE4MSwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQgogICAg
IG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwg
aW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nh
c3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJ
REJPYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5kZXhJZCwgKnRyYW5zYWN0aW9uUHJveHktPmdl
dFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oCmluZGV4IDg0NzBjMWFkOTA1YmMxNTZmZDlmM2I4ZmMxNGVmZjFlNDExZThiZWIuLjc5
MTEzYWU5NTY1YTMxNGRjY2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApA
QCAtNDUsMTYgKzQ1LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90
IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBX
VEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldElu
ZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVh
ZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CisKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4KGludDY0X3QpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdl
PiwgV2ViQ29yZTo6SURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKaW5kZXggODhmOTg1MmFjZWY0YzZlODlhNTg5ZTQ1MjU5
ZTIyYjFmMzg2YjFlNS4uZjA4MzdmZWY2YTQ2ZTFmM2M0ZmRiMjk5OTE0MGUzZWM3YWJhMmU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcApAQCAtNjIsNiArNjIsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpvYmpl
Y3RTdG8KICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShvYmpl
Y3RTdG9yZS5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0
b3JlKGludDY0X3QgaW5kZXhJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgT3duUHRyPFdl
YklEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGFkb3B0UHRyKG1fd2ViSURCVHJhbnNhY3Rp
b24tPm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKSk7CisgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpj
cmVhdGUob2JqZWN0U3RvcmUucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eTo6Y29tbWl0KCkKIHsKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5jb21taXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eS5oCmluZGV4IDdlNzQ4NmJkN2MzMjA2NmNjMDJkNjc2MWM4MDk3YzliY2Rm
NTMzZTUuLmU4ZjJjMzM3NTQ4MzRkZWJlNDQ2OTRkZTA0ZmIwMWNkOWVlNDE4NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0
X3QsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
VGFza0V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJD
YWxsYmFja3NJbXBsLmNwcAppbmRleCBlMDljMWEzZmVkMjQ3ZDJmNTViZTdiOTcyNWQ1YTM5MjUz
YjY5NjY2Li44ZDEyY2ZhM2VhOWJhZTMyZDQ3YzMzNGZjMGUwMTdkMDkwZGRhN2E4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFz
ZUltcGwuY3BwCmluZGV4IGU3MTAyOWRlYjM0ODQ3MTViMTMwZDNhMWI4ZmNkM2Y2MDhjYjA2Y2Iu
LjkwYzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzUsNiAr
NzUsMTEgQEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHIKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+
ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0
ZU9iamVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIG1fZGF0YWJh
c2VCYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworfQorCiB2b2lkIFdlYklE
QkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2Rh
dGFiYXNlQmFja2VuZC0+c2V0VmVyc2lvbih2ZXJzaW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7CkBAIC05
MSw2ICs5NiwxNyBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFu
c2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2Vi
SURCVHJhbnNhY3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAorV2ViSURCVHJhbnNhY3Rpb24q
IFdlYklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9u
Zz4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFZlY3Rvcjxp
bnQ2NF90PiBvYmplY3RTdG9yZUlkTGlzdChvYmplY3RTdG9yZUlkcy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG9iamVjdFN0b3JlSWRMaXN0W2ldID0gb2JqZWN0U3RvcmVJZHNbaV07CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFj
a2VuZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZExpc3QsIG1vZGUpOworICAgIGlmICghdHJh
bnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNh
Y3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKK30KKwogdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNs
b3NlKCkKIHsKICAgICAvLyBVc2UgdGhlIGNhbGxiYWNrcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0
cnVjdG9yIHNvIHRoYXQgdGhlIGJhY2tlbmQgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNzY5YmRmNWQwNWYwYjNiYjFlOGI2NWY0
ZTA5ZmMzMjc1ZWJjYTg2MC4uNjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBs
LmgKQEAgLTU0LDggKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0
U3RvcmUqIGNyZWF0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0
cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmlu
Z0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9y
PGxvbmcgbG9uZz4mIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VDbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggZGQxYzJjOGU1NDBm
ZmViYjM4OGFkMmNjMTM2YjhjZWJmZjA5ZGNiNy4uMmNhNWJmN2M3ZDZiMjljMmUyYTA2ZmJlZmM2
ODZjNTJlYThjNmMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1l
dGFkYXRhLmNwcApAQCAtNDksNiArNDksNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRh
dGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgZm9y
IChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3Rv
cmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9y
ICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7CiAgICAg
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIE9iamVjdFN0b3JlIHdlYk9iamVjdFN0b3JlOworICAgICAg
ICB3ZWJPYmplY3RTdG9yZS5pZCA9IG9iamVjdFN0b3JlLmlkOwogICAgICAgICB3ZWJPYmplY3RT
dG9yZS5uYW1lID0gb2JqZWN0U3RvcmUubmFtZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUua2V5
UGF0aCA9IG9iamVjdFN0b3JlLmtleVBhdGg7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmF1dG9J
bmNyZW1lbnQgPSBvYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50OwpAQCAtNTksNiArNjAsNyBAQCBX
ZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGluZGV4SXRlcmF0b3IgPSBvYmplY3RTdG9yZS5pbmRl
eGVzLmJlZ2luKCk7IGluZGV4SXRlcmF0b3IgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsg
KytpbmRleEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7
CisgICAgICAgICAgICB3ZWJJbmRleC5pZCA9IGluZGV4LmlkOwogICAgICAgICAgICAgd2ViSW5k
ZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5k
ZXgua2V5UGF0aDsKICAgICAgICAgICAgIHdlYkluZGV4LnVuaXF1ZSA9IGluZGV4LnVuaXF1ZTsK
QEAgLTc5LDkgKzgxLDkgQEAgV2ViSURCTWV0YWRhdGE6Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0
YWRhdGEoKSBjb25zdAogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYk9iamVjdFN0
b3JlLmluZGV4ZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGNvbnN0IEluZGV4IHdlYklu
ZGV4ID0gd2ViT2JqZWN0U3RvcmUuaW5kZXhlc1tqXTsKICAgICAgICAgICAgIElEQkluZGV4TWV0
YWRhdGEgaW5kZXgod2ViSW5kZXgubmFtZSwgd2ViSW5kZXguaWQsIHdlYkluZGV4LmtleVBhdGgs
IHdlYkluZGV4LnVuaXF1ZSwgd2ViSW5kZXgubXVsdGlFbnRyeSk7Ci0gICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5uYW1lLCBpbmRleCk7CisgICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwogICAgICAgICB9Ci0gICAgICAg
IGRiLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUubmFtZSwgb2JqZWN0U3RvcmUpOworICAg
ICAgICBkYi5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7CiAg
ICAgfQogICAgIHJldHVybiBkYjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCmluZGV4IGQ4MTQwOTNmMGY1YjM0MWViMmQ5
OWQ5N2M5MTgyOGFjNTA1MjBkNDUuLmRiZWE2NTUzYWIxN2FlYmY0ODdmZWQ1Y2YxZTdjZTRhMzJh
ZTg2MTUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcApAQCAtNzUsNiArNzUsMjMgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2
YWwKICAgICBtX29iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRp
Y19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSks
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRl
eEtleXMsIGVjKTsKIH0KIAordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0
TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5k
ZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCit7Cisg
ICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8IGxvbmc+IGluZGV4SWRzKHdlYkluZGV4SWRzLnNpemUoKSk7CisgICAgVmVjdG9y
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleXMod2Vi
SW5kZXhLZXlzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4
SWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5kZXhJZHNbaV07
CisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3ZWJJbmRleEtl
eXNbaV0uc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJJbmRleEtl
eXNbaV0uc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpbmRleEtleUxpc3Rbal0gPSB3ZWJJbmRl
eEtleXNbaV1bal07CisgICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlzdDsKKyAgICB9
CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgSURCQ2FsbGJhY2tz
UHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYg
cHJpbWFyeUtleSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNv
bnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQod2ViSW5kZXhOYW1lcy5zaXpl
KCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC05MSw2ICsxMDgsMjIgQEAgdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlL
ZXksIGNvbnN0IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtl
eSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJ
bmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8bG9u
ZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJ
bmRleEtleXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBB
U1NFUlQod2ViSW5kZXhJZHMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJbmRleElkcy5zaXplKCkpOworICAgIFZlY3RvcjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlzKHdlYklu
ZGV4S2V5cy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleElk
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4SWRzW2ldOwor
ICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5kZXhLZXlz
W2ldLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5kZXhLZXlz
W2ldLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2ViSW5kZXhL
ZXlzW2ldW2pdOworICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7CisgICAgfQor
ICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRleElkcywgaW5k
ZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7
Cit9CisKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzKHdlYklu
ZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTk5LDYgKzEzMiwxNCBAQCB2b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJ
bmRleAogICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleE5hbWVzLCB0cmFu
c2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKK3ZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPGxv
bmcgbG9uZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhOYW1lcy5zaXpl
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOworICAgIG1fb2JqZWN0
U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleElkcywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOworfQorCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1w
bDo6ZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCBXZWJJREJD
YWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5j
dGlvbihrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFj
a3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVj
KTsKQEAgLTEyNSwxMSArMTY2LDI0IEBAIFdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OmluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kCiAgICAgcmV0
dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCitXZWJJREJJbmRleCogV2ViSURC
T2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmlu
ZGV4KG9iamVjdFN0b3JlSWQpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBuZXcgV2ViSURCSW5kZXhJbXBsKGluZGV4KTsKK30KKwogdm9pZCBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCB0cmFuc2FjdGlvbi5nZXRJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCit2b2lkIFdlYklEQk9iamVj
dFN0b3JlSW1wbDo6ZGVsZXRlSW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgob2JqZWN0U3RvcmVJZCwgdHJhbnNhY3Rpb24u
Z2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKK30KKwogdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJh
bmdlLCBXZWJJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUgdGFza1R5cGUsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihrZXlSYW5nZSwgc3RhdGljX2Nhc3Q8SURCQ3Vy
c29yOjpEaXJlY3Rpb24+KGRpcmVjdGlvbiksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRv
cHRQdHIoY2FsbGJhY2tzKSksIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTo6VGFza1R5cGU+KHRhc2tUeXBlKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKaW5kZXggN2U5ZWQyNTczY2I5NGI4OTdiY2Y1ODc1
YTUyMzIyNzYxYjE0MzA4ZC4uNWRlM2M5YTE1YWQ4ZWY1ZjQ2MGE4ODZhYzFjZGVhYmNjYmQ1ODJm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3Rv
cmVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3Rv
cmVJbXBsLmgKQEAgLTQ3LDE0ICs0NywxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldChjb25z
dCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhjb25z
dCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwg
Y29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJJbmRleEtleXM+Jik7CiAgICAgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5
JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIHNl
dEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYg
aW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIHNldEluZGV4
ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAKICAgICBXZWJJREJJbmRleCogY3JlYXRlSW5k
ZXgobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQktleVBhdGgm
LCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYs
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJJREJJbmRleCogaW5kZXgoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgV2ViSURCSW5kZXgqIGluZGV4KGxv
bmcgbG9uZyk7CiAgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVs
ZXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdl
YklEQkN1cnNvcjo6RGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJJREJUcmFuc2FjdGlv
bjo6VGFza1R5cGUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgY291bnQoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDVjYmJlZTY2MzRhM2JmZjE5NDcwZDZmNzliMGFhZjRhYjg3MDRjMGYuLjY2MTZkNjcxZmMz
MGM5N2U2NzI2MTRjMWE0MTk5ZTNhN2QwODg1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcApAQCAtNTUsNiArNTUsMTQg
QEAgV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBFeGMKICAgICByZXR1cm4gbmV3IFdlYklEQk9iamVjdFN0
b3JlSW1wbChvYmplY3RTdG9yZSk7CiB9CiAKK1dlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFu
c2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUoaW5kZXhJZCwgZWMpOworICAgIGlmICgh
b2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsKG9iamVjdFN0b3JlKTsKK30KKwogdm9pZCBXZWJJREJUcmFuc2FjdGlvbklt
cGw6OmNvbW1pdCgpCiB7CiAgICAgbV9iYWNrZW5kLT5jb21taXQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggNjZlMzE1
MzAwMGU3M2IwY2ViNzRlODdhMjdmNzg5ZmJiMmRmYTczMy4uMWVlNmFiODAxOTdlZjc4ZmFmYTEz
ZTk2ZmQwNWY3MGYzN2JhZDc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTM5LDkgKzM5LDEwIEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViSURCVHJhbnNhY3Rpb25JbXBsOiBwdWJsaWMgV2ViSURCVHJhbnNh
Y3Rpb24gewogcHVibGljOgogICAgIFdlYklEQlRyYW5zYWN0aW9uSW1wbChXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVh
bCB+V2ViSURCVHJhbnNhY3Rpb25JbXBsKCk7ICAKKyAgICB2aXJ0dWFsIH5XZWJJREJUcmFuc2Fj
dGlvbkltcGwoKTsKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
V2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5k
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2Vu
ZFRlc3QuY3BwCmluZGV4IDg5MzYzZjAwNzc0NGQ0MDYyOGRiNTg2Y2U5N2JjNDc3MTNmYmVmYWUu
LmU5N2JjN2Y2ZGY5YTQxOGNmZjY1NjBkMmMxMjM0ZWJjMWQzYTY4NDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNw
cApAQCAtMTUyLDggKzE1MiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJEYXRhYmFzZU1l
dGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gSURCRGF0YWJhc2VNZXRhZGF0YSgpOyB9
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3Qq
IHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hvcnQg
bW9kZSkgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171346</attachid>
            <date>2012-10-29 17:32:09 -0700</date>
            <delta_ts>2012-10-30 10:16:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121029173036.patch</filename>
            <type>text/plain</type>
            <size>113745</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDdkZWRlOTdkNjg4Yjc1
YTM0MDdlMDIwYWZiOGNlZDYxNGI4YmMzMS4uOGI1ZjBiMWYzYmIwM2Y0YWQ3ODk5MDg4YTU0NjRi
YTZhZjk0OGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI5ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBUZXh0IHdpdGggemVybyBmb250IHNp
emUgcmVuZGVycyBhcyBYIHB4IHNvbWV0aW1lcywgY2F1c2luZyBmYXN0L3RleHQvemVyby1mb250
LXNpemUtMi5odG1sIHRvIGZhaWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjJkNDUx
ZGMwNTlhOGQyYjM0ZjRmMDU3N2U5Y2FhZTBjOWUzMjgzYi4uZDIwODFkODY4MmM5ZGVkNTQ0Zjdl
ZTRiNDBmMTFiNGJjM2JmYmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MSBAQAorMjAxMi0xMC0yNSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBhZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJh
Y2tlbmQgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ2hyb21pdW0gUHJveHkgYW5kIFdlYklEQiogc3VwcG9ydCBmb3IgbmV3IGludDY0X3QtYmFz
ZWQgbWV0aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6
cHV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbjo6
b2JqZWN0U3RvcmUpOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJh
Y2tlbmRQcm94eTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kUHJveHkpOgorICAgICAgICAq
IHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVh
ZHkpOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgp
OgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5k
ZXgpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAg
ICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5OjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAg
ICAgICogc3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0
YWRhdGE6OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFu
c2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGw6
Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYklEQlRy
YW5zYWN0aW9uSW1wbC5oOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3Qu
Y3BwOgorCiAyMDEyLTEwLTI5ICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYnVnQGdtYWls
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZTogbWFrZSBjcHUtbW9uaXRv
cmluZyBmZWF0dXJlIGF2YWlsYWJsZSBvbmx5IG9uIGNhcGFibGUgYnJvd3NlcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggYzM5NDA2
OGM1Mjc5NTBjNzAwMDA3OGE1Y2Q0NDU0M2RkNDIwOWI5ZS4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5
NzViYjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJh
Y2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCkBAIC02Nyw3ICs2Niw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEZyb20gSURCRmFjdG9yLmRlbGV0ZURhdGFiYXNlKCksIElEQk9i
amVjdFN0b3JlL0lEQkluZGV4LmdldCgpLCBJREJPYmplY3RTdG9yZS5kZWxldGUoKSwgSURCT2Jq
ZWN0U3RvcmUuY2xlYXIoKQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSA9IDA7Ci0gICAg
CisKICAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUoKQogICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7CiAgICAg
Ly8gRnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAyYzkxZDcyZjdlZGZj
MjZiMmM0MjMzNmM3NTlkOGU0ZmNhNTlhMDg4Li5mY2NiNDU2YzVkNjhhMjE0NjdmNThmMDljZGM2
MjdmYzMwZmQ5NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVz
LT5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+
dmFsdWUubmFtZSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBv
YmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0
aFN0cmluZyk7CiAgICAgfQogCi0gICAgaWYgKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG5hbWUpKSB7CisgICAgaWYgKG1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShuYW1l
KSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDcgKzE3MCw3IEBAIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvCiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUs
IG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBvYmplY3RT
dG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG1ldGFkYXRhKTsKKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKICAgICAr
K21fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZDsKIAogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwpAQCAtMTg3LDcg
KzE4Nyw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisKKyAg
ICBpbnQ2NCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7
CisgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewogICAg
ICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUp
OwotICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKICAgICB9CiB9
CiAKQEAgLTI0MSw2ICsyNDMsMTMgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0
YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yZU5hbWVz
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc09iamVj
dFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNh
Y3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBP
cGVyYXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBh
dCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKICAg
ICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCkBAIC0yNTAsNyArMjU5
LDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwg
bW9kZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCAqc3RvcmVO
YW1lcywgbW9kZSwgdGhpcyk7CiAgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3Mo
dHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGMzNmQ4YzMyOWEwZWZmOGI2YmJlNWUxZGNhYjEz
ODE1ZWRlNGExNTMuLjdkYTU0MzJkMzgyYzFiNGUwOGRlNWViYTViODA5NmM2NGRiZjU0NmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xNjcsMTMgKzE2NywxMyBAQCBJREJEYXRhYmFzZU1l
dGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwog
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsK
KyAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52
YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCiBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworICAgIEFTU0VSVCghbV9v
YmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKSk7
CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CkBAIC0xOTMsNyArMTkz
LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICBtX29iamVj
dFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVs
ZWFzZSgpOwogfQogCkBAIC0yMDcsMTcgKzIwNywyNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1QYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBp
ZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIHJldHVybiBt
X29iamVjdFN0b3Jlcy5nZXQoaWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbnQ2NF90
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAg
Zm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5Owor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAog
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RT
dG9yZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMjI3LDcgKzIzNyw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgbV9vYmplY3RTdG9yZXMucmVtb3Zl
KGlkKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQpAQCAtNDIxLDIwICs0MzEsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5nT3BlbkNhbGxz
LmlzRW1wdHkoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiwgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
b2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7CisgICAgLy8gRklYTUU6IEZpcnN0IHBhcmFt
ZXRlciBpc24ndCB1c2VkIGZvciBhbnl0aGluZyB5ZXQgYW55d2F5LCBhbmQgdGhpcyBtZXRob2Qg
aXMgZ29pbmcgYXdheS4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoVmVjdG9yPGludDY0
X3Q+KCksIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpCit7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRz
LCBtb2RlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUuZ2V0KCkpOwpAQCAtNjExLDIxICs2MjAsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YT4gb2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21l
dGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNp
emUoKTsgaSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLm5h
bWUsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNb
aV0pKTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOwog
fQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1h
cChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBP
YmplY3RTdG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworICAgIEFTU0VSVChkYXRh
YmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPmlkKCkpKTsKKyAgICBk
YXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAog
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQog
ewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZVB0ciA9
IG9iamVjdFN0b3JlOwotICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlUHRyLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3JlUHRyLT5uYW1lKCksIG9iamVjdFN0b3JlUHRyKTsKKyAgICBBU1NF
UlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+aWQo
KSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPmlk
KCksIG9iamVjdFN0b3JlUHRyKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBp
bnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCAxMWE2OWQw
YmZkYTY2YjA2MjAxZDM5NjNjMGVlMTQ0YWI4OGUzNWU4Li5mNWNlODFkNmNiNDE1ZTM5ZTIxYTQ1
NWEyMjAyMjkxMTQ0YmYzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC02MiwxMiArNjIsMTUg
QEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1
YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUoZ2V0T2JqZWN0U3RvcmVJZChuYW1l
KSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0KTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUoaW50NjRfdCBpZCk7CisgICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25D
b29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKQEAgLTEwMCw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZh
Y3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0
ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW1wbD4gbV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+
IE9iamVjdFN0b3JlTWFwOwogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAg
ICAgT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNGNkMDg0NWI0MzZiMjc0ODdi
MWRjMTU3YTE4ODE3ZDFmYmUxN2M0OS4uMGM1M2NkN2NmMTU4OTFjMDUxN2ZkOTMyNDM5Y2UxYjdh
MTkxOTdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU2LDggKzU2LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdM
aXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggODUzNTc1N2YyMDY1NTE3MDE1Yjgx
MDQxZmUxMmM2YTA2NTk0ZDZiMS4uZTc4OTEzYmEwNGNiYmM3MzMyMjgzZjA1ZjRiYWFhNTAwMGIz
ZTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKaW5kZXggNDIxOTE1NzkyNTkzNjcy
OTE2YmY3OTkwNTU4ODU1MzlkOGUyNmY2Yy4uZDBlNzRkNTc0MWY2MjU3ZjgwNGU3OTg1Y2VlNmEz
MzIzNDg3ZDM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBJREJGYWN0b3J5X2gKICNkZWZpbmUg
SURCRmFjdG9yeV9oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0OTA5MTYyM2Q4ZGUyM2Y5
YTg3NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4YjgxM2E3YmExMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAtNTcsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4o
MCksIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMp
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3Blbktl
eUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0K
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlv
biwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAwNzYxZjA2ODFi
YmM5ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRl
Zjg4YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDYzNTFlNmZiOGU3NzAwMjYyZjZkYzM1ZGYwMzEyMDk4
MTNiMjA5ZDAuLmJhYzhjZWEwNjVmYzgwZDc3ZWIyNWFhMmFiZWNhYzIxMzYwOTQ4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggNzY4ZWJiYWY0
YTYzNjE5OWI5ZGEwMDI2N2UyYzBkNDc2ZGM5YjgwYS4uMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQx
OTI4NTcyYzljMmIxNjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTWV0YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJNZXRhZGF0YS5oCkBAIC0zOCwzNyArMzgsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFk
YXRhOwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7Ci0gICAgLy8gRklYTUU6IFRoZXNl
IGNhbiBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgotICAgIGVudW0gewotICAgICAgICBO
b0ludFZlcnNpb24gPSAtMSwKLSAgICAgICAgRGVmYXVsdEludFZlcnNpb24gPSAwCi0gICAgfTsK
LQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQotICAgICAgICA6IGludFZlcnNpb24oTm9JbnRW
ZXJzaW9uKQotICAgIHsKLSAgICB9Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRW
ZXJzaW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0
YSB7CisgICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQorICAgIElEQkluZGV4TWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogICAgICAgICA6IG5hbWUobmFtZSkKICAgICAg
ICAgLCBpZChpZCkKLSAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgaW50VmVy
c2lvbihpbnRWZXJzaW9uKQotICAgICAgICAsIG1heE9iamVjdFN0b3JlSWQobWF4T2JqZWN0U3Rv
cmVJZCkKLSAgICB7Ci0gICAgfQotCisgICAgICAgICwga2V5UGF0aChrZXlQYXRoKQorICAgICAg
ICAsIHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KSB7IH0K
ICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIFN0cmluZyB2ZXJzaW9uOwot
ICAgIGludDY0X3QgaW50VmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7Cisg
ICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJvb2wgdW5pcXVlOworICAgIGJvb2wgbXVsdGlF
bnRyeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+IE9iamVjdFN0b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKyAg
ICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIH07CiAKIHN0cnVjdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIHsKQEAgLTg3LDIzICs3MSw2NiBAQCBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSB7CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50OwogICAgIGludDY0X3QgbWF4
SW5kZXhJZDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkluZGV4TWV0YWRhdGE+
IEluZGV4TWFwOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwog
ICAgIEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9
OwogCi1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5kZXhNZXRhZGF0YSgpIHsg
fQotICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQor
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1FOiBUaGVzZSBjYW4gcHJv
YmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAgICAgICAgTm9JbnRWZXJz
aW9uID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAorICAgIH07CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3Rv
cmVNYXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAgICAgOiBpbnRWZXJzaW9u
KE5vSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQogICAgICAgICA6IG5hbWUo
bmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgpCi0gICAg
ICAgICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50cnkpIHsg
fQorICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBpbnRWZXJzaW9uKGludFZl
cnNpb24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RTdG9yZUlkKQorICAg
IHsKKyAgICB9CisKKyAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlKG5hbWUp
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKICAgICBTdHJp
bmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIElEQktleVBhdGgga2V5UGF0aDsKLSAgICBi
b29sIHVuaXF1ZTsKLSAgICBib29sIG11bHRpRW50cnk7CisgICAgU3RyaW5nIHZlcnNpb247Cisg
ICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKKwor
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBmYzY1
NzNhMThhMjg2ZWMwYTYyNWNmNmE1NWRmNjUyZTFhZDdhYmEzLi5kOWQyZWMyODA0OTU5NGUyNzA4
OGQxZmZjZmQyMzIxNjk3NjUxNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIFBhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKICAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOworICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIGluZGV4TmFtZXMtPnNvcnQo
KTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDksNyArMjA5LDcg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5k
ZXhLZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVl
LCB2YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgICAgICBpbmRleEtl
eXMuYXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBp
bmRleE5hbWVzLnNpemUoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQKICAgICAgICAgZWMgPSBOQVRJVkVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICBpZiAobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
aWYgKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpAQCAtNDA5LDcgKzQwOSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgSURCSW5k
ZXhNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOwogICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1l
dGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgbV9tZXRhZGF0YS5pbmRl
eGVzLnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRl
eElkLCBtZXRhZGF0YSk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCkBAIC00NDQs
MTUgKzQ0NCwyNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChu
YW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlk
bid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2Rl
LiBBbmQgdmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRh
aW5zSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0
YS5pbmRleGVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJh
Y2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYmIGlu
ZGV4QmFja2VuZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgw
KTsKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUp
IHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworCisg
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRh
dGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQpAQCAtNDY3LDIxICs0NzYsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7CisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKKyAgICAgICAgQVNTRVJU
KG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAgIElEQkluZGV4TWFwOjpp
dGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
aW5kZXhNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUo
aXQtPnZhbHVlLT5pZCgpKTsKICAgICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsK
ICAgICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSk7Ci0gICAgICAgIG1f
bWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCmluZGV4IDIzYTMzNjdmNGMzYjU2MzgzNmU1NWFjNDk4ZDc1NzYxZDIwMTA0
NDYuLmQ2YjYzZDgzMjk2MmU2Y2UxZWRjM2JmMzBhNDM2OTBmZjllNzNmYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtMTA3LDcg
KzEwNiw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBAIC0xMTgsMTYgKzExNywyMCBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhO
YW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CisgICAgT3du
UHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3Rvcjxp
bnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0lu
ZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKIAog
ICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKIAogICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2Uo
KSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhJZHMucmVs
ZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9B
Qk9SVF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRo
SW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJu
IHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0aW9u
UHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKK30KIG5hbWVzcGFjZSB7
CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0xNTcsOCArMTYwLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlz
KGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CisgICAgYm9vbCB3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7CisgICAgICAgIGludDY0X3QgaW5k
ZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFiYWNraW5nU3Rv
cmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjgsOCArMTcyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZhdGU6CiAKICAgICBib29sIGFkZGlu
Z0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkzLDEzICsxOTUsMTMgQEAgcHJpdmF0
ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtl
eVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlz
LCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJy
b3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5
V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMs
IFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgpID09IGluZGV4S2V5cy5z
aXplKCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNpemUoKSk7
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFtZXNbaV0s
IGluZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGlu
ZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNC
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgewogCkBA
IC0yMjgsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4
TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
cikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4
S2V5cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwpA
QCAtMjQzLDcgKzI0NSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAKICAgICBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgdGhpcywgcHJpbWFy
eUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9y
TWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMs
IHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAm
ZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBkZWFsIHdpdGggZXJy
b3JNZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25seSBmYWlscyBvbiB1bmlxdWVuZXNz
IGNvbnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIkR1
cGxpY2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAg
ICByZXR1cm47CkBAIC0yNTEsNDYgKzI1Myw2OCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgp
OwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQsIG1faW5kZXhlcy5nZXQoaW5k
ZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRl
ci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKmJhY2tpbmdTdG9yZSgp
LCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBt
X21ldGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJm
YWNlKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5h
bWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBp
bmRleElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOworICAgIHJldHVybiBzZXRJbmRleEtl
eXMocHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb25QdHIpOwor
fQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKIAotICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMp
KTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVt
cHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIG5hbWVz
LnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQoreworICAg
IFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7CisgICAgLy8gRklY
TUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4gaWYg
dGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8gcmVt
b3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxsIGdv
IGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2
IGxhbmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKKyAgICAgICAgZm9yIChJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRl
eGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0g
aW5kZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtleTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVyZmFj
ZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
cG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4
TmFtZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IGluZGV4SWRz
ID0gcG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy0+c2l6
ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVu
dCgpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJh
bnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
T3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5h
bWVzID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJ
ZHMgPSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtl
eXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMgJiYgaW5kZXhLZXlzICYm
IGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CisgICAgQVNTRVJUKGlu
ZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6
ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAKQEAgLTMxNCw3
ICszMzgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJ
bmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAg
ICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBr
ZXksIGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleElkcywg
KmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzMwLDcgKzM1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAg
ICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0
KCksICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
bV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmlu
ZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRl
eEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKSkgewogCiAgICAgICAgICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRh
IHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKGVy
cm9yKTsKQEAgLTM3Myw3ICszOTcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgICAg
ICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+
dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPmtleSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcgKzQzNCw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhl
cy5jb250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICVzIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFpbnMo
aWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgp
ID09IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Miw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgp
OworICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQogCkBAIC00NDIsMjIgKzQ2Niw0MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhcwog
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgo
aW50NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFTU0VSVChpbmRleCk7CiAgICAgcmV0
dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIGluZGV4
KGdldEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoSW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5l
bmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0X3Q+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKIHsKLSAg
ICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBWZWN0b3I8aW50NjRfdD4g
cmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgo
aW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRh
aW5zKGluZGV4SWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gbV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTQ2Nyw3ICs1MTEsMTIgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQlRyYW5zYWN0aW9uQmEKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1f
aW5kZXhlcy5yZW1vdmUobmFtZSk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBkZWxldGVJbmRleChnZXRJbmRleElk
KG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCkBAIC01NDEsMjAgKzU5MCwyMCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAgICBWZWN0b3I8SURCSW5kZXhN
ZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQo
KSwgbV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5uYW1lLCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOwor
ICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6
OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIEFTU0VSVChv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkpKTsKLSAgICBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKKyAgICBBU1NFUlQob2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOworICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewogICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+aWQoKSkpOworICAgIG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5pZCgpLCBpbmRleFB0cik7CiB9CiAKIFBh
c3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpAQCAtNTcz
LDcgKzYyMiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrCiAgICAgYmFja2luZ1N0b3JlKCkt
Pm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5k
ZXggOTA4ZTdmMjM4ZWZmMDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVjYS4uYzJlZmQzYjBlM2Ey
MWI2MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApA
QCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOwotICAgIAorICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKKwogICAg
IHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0CiAgICAgewpAQCAtNjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aElu
ZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURC
S2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3Jl
YXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7CkBAIC04NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBjb25z
dCBib29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5j
cmVtZW50OyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9
Ci0gICAgCisKKyAgICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7CisgICAgVmVj
dG9yPGludDY0X3Q+IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKIHByaXZh
dGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCkBAIC05OCw5ICsxMDcs
OSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50
KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBh
c3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKICAgICBzdGF0aWMg
dm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7Ci0gICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NP
d25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5hbWVzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBj
bGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaAppbmRleCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkwNjM4ODFmMWQ0OGQ2OGRk
Li45YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAogICAgIHZpcnR1YWwg
dm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuY3BwCmluZGV4IGUwNzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4YWVlNDc3NzQxY2EuLmIy
MzkwMTYxOWJjYTNhMTA5YWZhNmQyNWE4YThkN2U1ZWY3ODI0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKGludDY0
X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAgbV9kYXRhYmFzZUNhbGxi
YWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cyA9IDA7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNh
Y3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFja2Vu
ZCwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhp
cyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbkJhY2tlbmQsIFZl
Y3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJh
c2UuZ2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZy
b250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gZnJvbnRlbmQ7CiAgICAgbV9yZXN1
bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAxODYwYmZjNTll
M2NhMzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4Li5jNmM2ZTNlMzhmOWFjYTYwNDUzNTBlNzNi
NTIyNzE2ZDBiYzFmM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNr
ZW5kCiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwogICAg
IGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlv
biA9IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbiAm
JiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihE
T01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUg
dW51c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhlYzE1ZTVlYzA3M2Rm
ZmIxZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjQ3MDA1YzNiNzYxZTIwYzI1ZjA4OTEyMWM0NjM3
ZjMwYmE4NzNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUs
IElEQkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIpCiB7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCA9IDA7Ci0g
ICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVz
dCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVz
LCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElE
QlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVz
dCogb3BlbkRCUmVxdWVzdCkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiB7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpKSk7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVl
c3QpKSk7CiAgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CkBAIC04OCwxMCArODgsMTEgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZUxlZ2FjeSgpCiB9CiAKIAotSURC
VHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJ
REJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVl
c3QqIG9wZW5EQlJlcXVlc3QpCitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5h
bWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5E
QlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9kYXRhYmFzZShkYikKKyAg
ICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZU5hbWVzKQogICAgICwgbV9vcGVuREJS
ZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fYWN0aXZl
KHRydWUpCkBAIC0xNTUsMTYgKzE1NiwxOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJ
REJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAg
IGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0
U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7Ci0gICAgQVNT
RVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0
b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgotICAgIGlmIChlYykKKyAgICBpZiAoIWlzVmVyc2lvbkNoYW5nZSgpICYmICFtX29iamVj
dFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tl
bmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYm
IG9iamVjdFN0b3JlQmFja2VuZCk7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZW5kKCkpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFkYXRhLmZpbmRPYmpl
Y3RTdG9yZShuYW1lKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3Rv
cmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5oCmluZGV4IDg5OTM5YmY4NTk3NWIxY2I5ZjdmNTBiNTE5N2Y5ZjZhYzMxYmZjOTUuLmNi
OGYwYjljMGIxNGQ2MTBmYjJiZGIzN2EzYzhiNjE2NGQ4YmU0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtMzAsNyArMzAs
NiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTYsOCAr
NTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZFUlNJT05fQ0hBTkdFID0gMgogICAgIH07CiAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1v
ZGUsIElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3Qq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBNb2RlLCBJREJEYXRh
YmFzZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIE1vZGUsIElE
QkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsK
QEAgLTEyMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOworICAg
IElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgTW9kZSwg
SURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAKICAgICB2b2lkIGVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC0x
NDUsNiArMTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJh
c2U7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIElE
Qk9wZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKICAgICBjb25zdCBNb2RlIG1fbW9kZTsK
ICAgICBib29sIG1fYWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBmMTY2
NTE5NDliYWQzYzViMTUxYmViNGZmNzVmMjVkMDZiNzFhMjY2Li5lMTY1MmQ2OTVkZjg1MzQxYjM2
MDg2ZDg2NzliMTM3NDQwMmZmOGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
MzksMTMgKzM5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
RE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3Jl
SWRzLCBtb2RlLCBkYXRhYmFzZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAg
OiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQorSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFzZShk
YXRhYmFzZSkKQEAgLTU1LDggKzU1LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMKICAgICAs
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKICAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQog
ewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOwotICAgIEFTU0VSVChtX21vZGUgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlz
RW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRD
cmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKIH0KIApAQCAtNjYsMzEgKzY0LDIzIEBAIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGludDY0X3QgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9J
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRG9l
cyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxkbid0IGJlIHRoYXQgc2xvdyBp
biBwcmFjdGljZS4KLSAgICBpZiAobV9tb2RlICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRy
YW5zYWN0aW9uIGNvdWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMg
Y3JlYXRpb24gKHdoZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9y
ZSBjYWxsLgotICAgIC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3Np
YmxlIGluIHRoZSBzcGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAg
IC8vICAgICAgICBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKGlkKTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9
CiAKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIHJldHVybiBvYmplY3RTdG9yZShtX2RhdGFiYXNlLT5nZXRPYmpl
Y3RTdG9yZUlkKG5hbWUpLCBlYyk7Cit9CisKIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCkBAIC0xMDAs
NyArOTAsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhU
YXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZQogICAgICAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQodGFzayk7CiAgICAgZWxzZQogICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBw
ZW5kKHRhc2spOwotICAgIAorCiAgICAgaWYgKGFib3J0VGFzaykKICAgICAgICAgbV9hYm9ydFRh
c2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRl
eCAzNGE5NzU3MGYwMGZiN2EwODRiOGRkMzg5MzQ3YTI1NGEyNTM0ODYyLi40ZTRkZGVjYzExMjM2
OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBA
IC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmgiCkBAIC00NSw3ICs0NCw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqKTsKICAgICBzdGF0aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogZnJvbShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGludGVyZmFjZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4oaW50ZXJmYWNlKTsK
QEAgLTU0LDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFj
a3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGlj
OgogICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1
bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAKICAgICBlbnVt
IFN0YXRlIHsKICAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0LgpA
QCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGFza0V2ZW50VGltZXJGaXJlZChU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vy
c29ycygpOwogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsK
KyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBmNzA3ZjM0YTA5OTg1NGY0MzkyMTgyMzk0YTJmMWU3
MjVjZTA1NzRjLi5kMTFlMTgxMWNlNDM1YmY2N2YwODMzZDNlNTU4MDZiODg3Y2U0ZTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6
CiAgICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgKaW5kZXggYTc1YjdiZTE0MmI5NjVhMTVkNjA2MDM2ZmNmYWQyOGEwOTJjOWFlZi4u
ZTdiOWZjYWZiYmNjMDdkNDY0ZTZkN2NkYzczOWZlNzE2Y2Q1MjJjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklEQkRhdGFiYXNlLmgKaW5kZXggYTQ5MzJlZTI4MjQwMDYyZDE1N2ZjZDAyYTU5YTdiMmYzNzBl
MTcyYi4uZjAyYmJmNDRjNDQ3ZDU3MDhhZjlkNDM3ZWFjZjk1ZjhkNDgwNmVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC01Niw2ICs1
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lv
biwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2Yg
dGhlIFdlYklEQlRyYW5zYWN0aW9uIHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVu
c2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjMsNiArNjQsMTEg
QEAgcHVibGljOgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisg
ICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCkgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQk9iamVjdFN0b3JlLmgKaW5kZXggY2EwMTAzY2RhNmZjM2YzNzJjYWRjYWFiN2Nk
NmNlMzA1YTIyN2QyZS4uOGVhOGRiODY2Zjg0MDc3MjgwY2Q0MzU5YzcyOGZhN2QyODM2MjBiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9y
ZS5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJ
REJLZXk+IFdlYkluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlz
KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1v
ZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtl
eXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBj
b25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleElkcywgY29uc3Qg
V2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9u
Q29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViSURC
S2V5UGF0aCYsIGJvb2wsIGJvb2wsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpCkBAIC02OSwxNCArNzAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+
JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZl
Y3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfTsKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBX
ZWJJREJJbmRleCB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCiAgICAgewogICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KyAgICB2aXJ0dWFsIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBsb25nIGxvbmcpCisgICAgewor
ICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChsb25n
IGxvbmcgaW5kZXhJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2Rl
JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3Bl
bkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChjb25zdCBXZWJJREJL
ZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4
IDgxNmEzMjgxNDcwYjcyOTJmNDNkNDRkMjMyZjMwM2M0ZmJiNWQ4NDYuLmJhYzJkYTg4ZDAzYTQw
OWE5N2UxOTQ4MzdlZjRkMGJiNzdmYTRiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGlj
OgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25n
IGxvbmcsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcAppbmRleCAyOWI4YzRiZjQxZGNhYWZhNjE5ZWI2YTBkMWExNTExMTRj
MjkxZTUzLi5mNmQ5NjQ0NzBlZmI0MTUxNDRmZGMxZDA0MDgyOTA5Y2RjZDhlNTA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHkuY3BwCkBAIC04NSw2ICs4NSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aQogICAgIG1f
d2ViSURCRGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kUHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBh
IHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBh
bGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93
ZWJJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgKnRyYW5zYWN0
aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KKwogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRQcm94eTo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NF
UlQobV93ZWJJREJEYXRhYmFzZSk7CkBAIC0xMDIsNiArMTEwLDE1IEBAIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJh
bnNhY3Rpb24oCiAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUo
dHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQor
eworICAgIE93blB0cjxXZWJJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0ciht
X3dlYklEQkRhdGFiYXNlLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSkpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4pCiB7CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5o
CmluZGV4IGZjODMxZThkZWM0OWE3OWU2MWNhN2NiY2VmNWI0NjdkMWM0YmQ1ZmQuLjkxNmY4MzNh
YjdlZmJmY2Q0MDY2MWVkYTc3ZmE5YWM5NTM4ZGM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaApAQCAtNDYsOCArNDYs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogc3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0
IG1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggMmI5
YjQ0YTdhMWZmY2RkODAyMDc1ZWEwZDM4ZTZiN2MwNzE3NDhhNS4uNmEwZDAyNzcyYjg0NGM3ZWY2
YWMyMGZiY2VjM2NjMzFkMWYzNjE0MiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNzcsNiArNzcs
MTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5w
dXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3Jl
OjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwg
KnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMs
IHdlYkluZGV4S2V5cywgZWMpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMpCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwK
KyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBv
YmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5
ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdl
YklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCks
IGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewog
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC04Nyw2ICs5NSwx
NCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0
SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFu
dGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJl
ciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94
eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblBy
b3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlv
bik7CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXks
IFdlYlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgaW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Q
cm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAv
LyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0
byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDcgKzE0NiwxNSBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZQogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCiAgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShp
bmRleE5hbWVzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cisg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJp
bmc+KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFk
eShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShX
ZWJWZWN0b3I8bG9uZyBsb25nPihpbmRleElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJ
REJUcmFuc2FjdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQxLDYgKzE2NSwxNCBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNv
bnN0IFN0cgogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQoreworICAgIE93
blB0cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5p
bmRleChpbmRleElkKSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJl
bmRlcmVyLApAQCAtMTQ5LDYgKzE4MSwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQgogICAg
IG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwg
aW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nh
c3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJ
REJPYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5kZXhJZCwgKnRyYW5zYWN0aW9uUHJveHktPmdl
dFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oCmluZGV4IDg0NzBjMWFkOTA1YmMxNTZmZDlmM2I4ZmMxNGVmZjFlNDExZThiZWIuLjc5
MTEzYWU5NTY1YTMxNGRjY2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApA
QCAtNDUsMTYgKzQ1LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90
IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBX
VEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldElu
ZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVh
ZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CisKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4KGludDY0X3QpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdl
PiwgV2ViQ29yZTo6SURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKaW5kZXggODhmOTg1MmFjZWY0YzZlODlhNTg5ZTQ1MjU5
ZTIyYjFmMzg2YjFlNS4uZjA4MzdmZWY2YTQ2ZTFmM2M0ZmRiMjk5OTE0MGUzZWM3YWJhMmU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcApAQCAtNjIsNiArNjIsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpvYmpl
Y3RTdG8KICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShvYmpl
Y3RTdG9yZS5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0
b3JlKGludDY0X3QgaW5kZXhJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgT3duUHRyPFdl
YklEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGFkb3B0UHRyKG1fd2ViSURCVHJhbnNhY3Rp
b24tPm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKSk7CisgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpj
cmVhdGUob2JqZWN0U3RvcmUucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eTo6Y29tbWl0KCkKIHsKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5jb21taXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eS5oCmluZGV4IDdlNzQ4NmJkN2MzMjA2NmNjMDJkNjc2MWM4MDk3YzliY2Rm
NTMzZTUuLmU4ZjJjMzM3NTQ4MzRkZWJlNDQ2OTRkZTA0ZmIwMWNkOWVlNDE4NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0
X3QsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
VGFza0V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJD
YWxsYmFja3NJbXBsLmNwcAppbmRleCBlMDljMWEzZmVkMjQ3ZDJmNTViZTdiOTcyNWQ1YTM5MjUz
YjY5NjY2Li44ZDEyY2ZhM2VhOWJhZTMyZDQ3YzMzNGZjMGUwMTdkMDkwZGRhN2E4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFz
ZUltcGwuY3BwCmluZGV4IGU3MTAyOWRlYjM0ODQ3MTViMTMwZDNhMWI4ZmNkM2Y2MDhjYjA2Y2Iu
LjkwYzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzUsNiAr
NzUsMTEgQEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHIKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+
ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0
ZU9iamVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIG1fZGF0YWJh
c2VCYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworfQorCiB2b2lkIFdlYklE
QkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2Rh
dGFiYXNlQmFja2VuZC0+c2V0VmVyc2lvbih2ZXJzaW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7CkBAIC05
MSw2ICs5NiwxNyBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFu
c2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2Vi
SURCVHJhbnNhY3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAorV2ViSURCVHJhbnNhY3Rpb24q
IFdlYklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9u
Zz4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFZlY3Rvcjxp
bnQ2NF90PiBvYmplY3RTdG9yZUlkTGlzdChvYmplY3RTdG9yZUlkcy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG9iamVjdFN0b3JlSWRMaXN0W2ldID0gb2JqZWN0U3RvcmVJZHNbaV07CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFj
a2VuZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZExpc3QsIG1vZGUpOworICAgIGlmICghdHJh
bnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNh
Y3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKK30KKwogdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNs
b3NlKCkKIHsKICAgICAvLyBVc2UgdGhlIGNhbGxiYWNrcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0
cnVjdG9yIHNvIHRoYXQgdGhlIGJhY2tlbmQgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNzY5YmRmNWQwNWYwYjNiYjFlOGI2NWY0
ZTA5ZmMzMjc1ZWJjYTg2MC4uNjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBs
LmgKQEAgLTU0LDggKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0
U3RvcmUqIGNyZWF0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0
cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmlu
Z0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9y
PGxvbmcgbG9uZz4mIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VDbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggZGQxYzJjOGU1NDBm
ZmViYjM4OGFkMmNjMTM2YjhjZWJmZjA5ZGNiNy4uMmNhNWJmN2M3ZDZiMjljMmUyYTA2ZmJlZmM2
ODZjNTJlYThjNmMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1l
dGFkYXRhLmNwcApAQCAtNDksNiArNDksNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRh
dGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgZm9y
IChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3Rv
cmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9y
ICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7CiAgICAg
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIE9iamVjdFN0b3JlIHdlYk9iamVjdFN0b3JlOworICAgICAg
ICB3ZWJPYmplY3RTdG9yZS5pZCA9IG9iamVjdFN0b3JlLmlkOwogICAgICAgICB3ZWJPYmplY3RT
dG9yZS5uYW1lID0gb2JqZWN0U3RvcmUubmFtZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUua2V5
UGF0aCA9IG9iamVjdFN0b3JlLmtleVBhdGg7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmF1dG9J
bmNyZW1lbnQgPSBvYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50OwpAQCAtNTksNiArNjAsNyBAQCBX
ZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGluZGV4SXRlcmF0b3IgPSBvYmplY3RTdG9yZS5pbmRl
eGVzLmJlZ2luKCk7IGluZGV4SXRlcmF0b3IgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsg
KytpbmRleEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7
CisgICAgICAgICAgICB3ZWJJbmRleC5pZCA9IGluZGV4LmlkOwogICAgICAgICAgICAgd2ViSW5k
ZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5k
ZXgua2V5UGF0aDsKICAgICAgICAgICAgIHdlYkluZGV4LnVuaXF1ZSA9IGluZGV4LnVuaXF1ZTsK
QEAgLTc5LDkgKzgxLDkgQEAgV2ViSURCTWV0YWRhdGE6Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0
YWRhdGEoKSBjb25zdAogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYk9iamVjdFN0
b3JlLmluZGV4ZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGNvbnN0IEluZGV4IHdlYklu
ZGV4ID0gd2ViT2JqZWN0U3RvcmUuaW5kZXhlc1tqXTsKICAgICAgICAgICAgIElEQkluZGV4TWV0
YWRhdGEgaW5kZXgod2ViSW5kZXgubmFtZSwgd2ViSW5kZXguaWQsIHdlYkluZGV4LmtleVBhdGgs
IHdlYkluZGV4LnVuaXF1ZSwgd2ViSW5kZXgubXVsdGlFbnRyeSk7Ci0gICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5uYW1lLCBpbmRleCk7CisgICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwogICAgICAgICB9Ci0gICAgICAg
IGRiLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUubmFtZSwgb2JqZWN0U3RvcmUpOworICAg
ICAgICBkYi5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7CiAg
ICAgfQogICAgIHJldHVybiBkYjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCmluZGV4IGQ4MTQwOTNmMGY1YjM0MWViMmQ5
OWQ5N2M5MTgyOGFjNTA1MjBkNDUuLmRiZWE2NTUzYWIxN2FlYmY0ODdmZWQ1Y2YxZTdjZTRhMzJh
ZTg2MTUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcApAQCAtNzUsNiArNzUsMjMgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2
YWwKICAgICBtX29iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRp
Y19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSks
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRl
eEtleXMsIGVjKTsKIH0KIAordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0
TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5k
ZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCit7Cisg
ICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8IGxvbmc+IGluZGV4SWRzKHdlYkluZGV4SWRzLnNpemUoKSk7CisgICAgVmVjdG9y
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleXMod2Vi
SW5kZXhLZXlzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4
SWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5kZXhJZHNbaV07
CisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3ZWJJbmRleEtl
eXNbaV0uc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJJbmRleEtl
eXNbaV0uc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpbmRleEtleUxpc3Rbal0gPSB3ZWJJbmRl
eEtleXNbaV1bal07CisgICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlzdDsKKyAgICB9
CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgSURCQ2FsbGJhY2tz
UHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYg
cHJpbWFyeUtleSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNv
bnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQod2ViSW5kZXhOYW1lcy5zaXpl
KCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC05MSw2ICsxMDgsMjIgQEAgdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlL
ZXksIGNvbnN0IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtl
eSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJ
bmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8bG9u
ZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJ
bmRleEtleXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBB
U1NFUlQod2ViSW5kZXhJZHMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJbmRleElkcy5zaXplKCkpOworICAgIFZlY3RvcjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlzKHdlYklu
ZGV4S2V5cy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleElk
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4SWRzW2ldOwor
ICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5kZXhLZXlz
W2ldLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5kZXhLZXlz
W2ldLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2ViSW5kZXhL
ZXlzW2ldW2pdOworICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7CisgICAgfQor
ICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRleElkcywgaW5k
ZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7
Cit9CisKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzKHdlYklu
ZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTk5LDYgKzEzMiwxNCBAQCB2b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJ
bmRleAogICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleE5hbWVzLCB0cmFu
c2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKK3ZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPGxv
bmcgbG9uZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhOYW1lcy5zaXpl
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOworICAgIG1fb2JqZWN0
U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleElkcywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOworfQorCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1w
bDo6ZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCBXZWJJREJD
YWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5j
dGlvbihrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFj
a3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVj
KTsKQEAgLTEyNSwxMSArMTY2LDI0IEBAIFdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OmluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kCiAgICAgcmV0
dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCitXZWJJREJJbmRleCogV2ViSURC
T2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmlu
ZGV4KG9iamVjdFN0b3JlSWQpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBuZXcgV2ViSURCSW5kZXhJbXBsKGluZGV4KTsKK30KKwogdm9pZCBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCB0cmFuc2FjdGlvbi5nZXRJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCit2b2lkIFdlYklEQk9iamVj
dFN0b3JlSW1wbDo6ZGVsZXRlSW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgob2JqZWN0U3RvcmVJZCwgdHJhbnNhY3Rpb24u
Z2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKK30KKwogdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJh
bmdlLCBXZWJJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUgdGFza1R5cGUsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihrZXlSYW5nZSwgc3RhdGljX2Nhc3Q8SURCQ3Vy
c29yOjpEaXJlY3Rpb24+KGRpcmVjdGlvbiksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRv
cHRQdHIoY2FsbGJhY2tzKSksIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTo6VGFza1R5cGU+KHRhc2tUeXBlKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKaW5kZXggN2U5ZWQyNTczY2I5NGI4OTdiY2Y1ODc1
YTUyMzIyNzYxYjE0MzA4ZC4uNWRlM2M5YTE1YWQ4ZWY1ZjQ2MGE4ODZhYzFjZGVhYmNjYmQ1ODJm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3Rv
cmVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3Rv
cmVJbXBsLmgKQEAgLTQ3LDE0ICs0NywxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldChjb25z
dCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhjb25z
dCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwg
Y29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJJbmRleEtleXM+Jik7CiAgICAgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5
JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIHNl
dEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYg
aW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIHNldEluZGV4
ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAKICAgICBXZWJJREJJbmRleCogY3JlYXRlSW5k
ZXgobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQktleVBhdGgm
LCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYs
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJJREJJbmRleCogaW5kZXgoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgV2ViSURCSW5kZXgqIGluZGV4KGxv
bmcgbG9uZyk7CiAgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVs
ZXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdl
YklEQkN1cnNvcjo6RGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJJREJUcmFuc2FjdGlv
bjo6VGFza1R5cGUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgY291bnQoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDVjYmJlZTY2MzRhM2JmZjE5NDcwZDZmNzliMGFhZjRhYjg3MDRjMGYuLjY2MTZkNjcxZmMz
MGM5N2U2NzI2MTRjMWE0MTk5ZTNhN2QwODg1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcApAQCAtNTUsNiArNTUsMTQg
QEAgV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBFeGMKICAgICByZXR1cm4gbmV3IFdlYklEQk9iamVjdFN0
b3JlSW1wbChvYmplY3RTdG9yZSk7CiB9CiAKK1dlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFu
c2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUoaW5kZXhJZCwgZWMpOworICAgIGlmICgh
b2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsKG9iamVjdFN0b3JlKTsKK30KKwogdm9pZCBXZWJJREJUcmFuc2FjdGlvbklt
cGw6OmNvbW1pdCgpCiB7CiAgICAgbV9iYWNrZW5kLT5jb21taXQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggNjZlMzE1
MzAwMGU3M2IwY2ViNzRlODdhMjdmNzg5ZmJiMmRmYTczMy4uMWVlNmFiODAxOTdlZjc4ZmFmYTEz
ZTk2ZmQwNWY3MGYzN2JhZDc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTM5LDkgKzM5LDEwIEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViSURCVHJhbnNhY3Rpb25JbXBsOiBwdWJsaWMgV2ViSURCVHJhbnNh
Y3Rpb24gewogcHVibGljOgogICAgIFdlYklEQlRyYW5zYWN0aW9uSW1wbChXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVh
bCB+V2ViSURCVHJhbnNhY3Rpb25JbXBsKCk7ICAKKyAgICB2aXJ0dWFsIH5XZWJJREJUcmFuc2Fj
dGlvbkltcGwoKTsKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
V2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5k
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2Vu
ZFRlc3QuY3BwCmluZGV4IDg5MzYzZjAwNzc0NGQ0MDYyOGRiNTg2Y2U5N2JjNDc3MTNmYmVmYWUu
LmU5N2JjN2Y2ZGY5YTQxOGNmZjY1NjBkMmMxMjM0ZWJjMWQzYTY4NDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNw
cApAQCAtMTUyLDggKzE1MiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJEYXRhYmFzZU1l
dGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gSURCRGF0YWJhc2VNZXRhZGF0YSgpOyB9
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3Qq
IHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hvcnQg
bW9kZSkgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171477</attachid>
            <date>2012-10-30 10:16:57 -0700</date>
            <delta_ts>2012-10-30 17:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121030101522.patch</filename>
            <type>text/plain</type>
            <size>113749</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDdkZWRlOTdkNjg4Yjc1
YTM0MDdlMDIwYWZiOGNlZDYxNGI4YmMzMS4uOGI1ZjBiMWYzYmIwM2Y0YWQ3ODk5MDg4YTU0NjRi
YTZhZjk0OGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI5ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBUZXh0IHdpdGggemVybyBmb250IHNp
emUgcmVuZGVycyBhcyBYIHB4IHNvbWV0aW1lcywgY2F1c2luZyBmYXN0L3RleHQvemVyby1mb250
LXNpemUtMi5odG1sIHRvIGZhaWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjJkNDUx
ZGMwNTlhOGQyYjM0ZjRmMDU3N2U5Y2FhZTBjOWUzMjgzYi4uZDIwODFkODY4MmM5ZGVkNTQ0Zjdl
ZTRiNDBmMTFiNGJjM2JmYmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MSBAQAorMjAxMi0xMC0yNSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBhZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJh
Y2tlbmQgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ2hyb21pdW0gUHJveHkgYW5kIFdlYklEQiogc3VwcG9ydCBmb3IgbmV3IGludDY0X3QtYmFz
ZWQgbWV0aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6
cHV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIHB1YmxpYy9X
ZWJJREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbjo6
b2JqZWN0U3RvcmUpOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJh
Y2tlbmRQcm94eTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kUHJveHkpOgorICAgICAgICAq
IHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyk6Cisg
ICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVh
ZHkpOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgp
OgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5k
ZXgpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAg
ICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5OjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAg
ICAgICogc3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0
YWRhdGE6OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFu
c2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGw6
Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYklEQlRy
YW5zYWN0aW9uSW1wbC5oOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3Qu
Y3BwOgorCiAyMDEyLTEwLTI5ICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYnVnQGdtYWls
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZTogbWFrZSBjcHUtbW9uaXRv
cmluZyBmZWF0dXJlIGF2YWlsYWJsZSBvbmx5IG9uIGNhcGFibGUgYnJvd3NlcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggYzM5NDA2
OGM1Mjc5NTBjNzAwMDA3OGE1Y2Q0NDU0M2RkNDIwOWI5ZS4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5
NzViYjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJh
Y2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCkBAIC02Nyw3ICs2Niw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEZyb20gSURCRmFjdG9yLmRlbGV0ZURhdGFiYXNlKCksIElEQk9i
amVjdFN0b3JlL0lEQkluZGV4LmdldCgpLCBJREJPYmplY3RTdG9yZS5kZWxldGUoKSwgSURCT2Jq
ZWN0U3RvcmUuY2xlYXIoKQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSA9IDA7Ci0gICAg
CisKICAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUoKQogICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7CiAgICAg
Ly8gRnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAyYzkxZDcyZjdlZGZj
MjZiMmM0MjMzNmM3NTlkOGU0ZmNhNTlhMDg4Li5mY2NiNDU2YzVkNjhhMjE0NjdmNThmMDljZGM2
MjdmYzMwZmQ5NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVz
LT5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+
dmFsdWUubmFtZSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBv
YmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0
aFN0cmluZyk7CiAgICAgfQogCi0gICAgaWYgKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG5hbWUpKSB7CisgICAgaWYgKG1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShuYW1l
KSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDcgKzE3MCw3IEBAIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvCiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUs
IG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBvYmplY3RT
dG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG1ldGFkYXRhKTsKKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKICAgICAr
K21fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZDsKIAogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwpAQCAtMTg3LDcg
KzE4Nyw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisKKyAg
ICBpbnQ2NCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7
CisgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewogICAg
ICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUp
OwotICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKICAgICB9CiB9
CiAKQEAgLTI0MSw2ICsyNDMsMTMgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0
YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yZU5hbWVz
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc09iamVj
dFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNh
Y3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBP
cGVyYXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBh
dCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKICAg
ICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCkBAIC0yNTAsNyArMjU5
LDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwg
bW9kZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCAqc3RvcmVO
YW1lcywgbW9kZSwgdGhpcyk7CiAgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3Mo
dHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGMzNmQ4YzMyOWEwZWZmOGI2YmJlNWUxZGNhYjEz
ODE1ZWRlNGExNTMuLjdkYTU0MzJkMzgyYzFiNGUwOGRlNWViYTViODA5NmM2NGRiZjU0NmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xNjcsMTMgKzE2NywxMyBAQCBJREJEYXRhYmFzZU1l
dGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwog
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsK
KyAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52
YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCiBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworICAgIEFTU0VSVCghbV9v
YmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKSk7
CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CkBAIC0xOTMsNyArMTkz
LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICBtX29iamVj
dFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVs
ZWFzZSgpOwogfQogCkBAIC0yMDcsMTcgKzIwNywyNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1QYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBp
ZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIHJldHVybiBt
X29iamVjdFN0b3Jlcy5nZXQoaWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbnQ2NF90
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAg
Zm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5Owor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAog
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RT
dG9yZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMjI3LDcgKzIzNyw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgbV9vYmplY3RTdG9yZXMucmVtb3Zl
KGlkKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQpAQCAtNDIxLDIwICs0MzEsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5nT3BlbkNhbGxz
LmlzRW1wdHkoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiwgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
b2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7CisgICAgLy8gRklYTUU6IEZpcnN0IHBhcmFt
ZXRlciBpc24ndCB1c2VkIGZvciBhbnl0aGluZyB5ZXQgYW55d2F5LCBhbmQgdGhpcyBtZXRob2Qg
aXMgZ29pbmcgYXdheS4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoVmVjdG9yPGludDY0
X3Q+KCksIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpCit7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRz
LCBtb2RlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUuZ2V0KCkpOwpAQCAtNjExLDIxICs2MjAsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YT4gb2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21l
dGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNp
emUoKTsgaSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLm5h
bWUsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNb
aV0pKTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOwog
fQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1h
cChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBP
YmplY3RTdG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworICAgIEFTU0VSVChkYXRh
YmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPmlkKCkpKTsKKyAgICBk
YXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAog
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQog
ewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZVB0ciA9
IG9iamVjdFN0b3JlOwotICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlUHRyLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3JlUHRyLT5uYW1lKCksIG9iamVjdFN0b3JlUHRyKTsKKyAgICBBU1NF
UlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+aWQo
KSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPmlk
KCksIG9iamVjdFN0b3JlUHRyKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBp
bnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCAxMWE2OWQw
YmZkYTY2YjA2MjAxZDM5NjNjMGVlMTQ0YWI4OGUzNWU4Li5mNWNlODFkNmNiNDE1ZTM5ZTIxYTQ1
NWEyMjAyMjkxMTQ0YmYzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC02MiwxMiArNjIsMTUg
QEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1
YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUoZ2V0T2JqZWN0U3RvcmVJZChuYW1l
KSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0KTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUoaW50NjRfdCBpZCk7CisgICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25D
b29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKQEAgLTEwMCw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZh
Y3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0
ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW1wbD4gbV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+
IE9iamVjdFN0b3JlTWFwOwogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAg
ICAgT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNGNkMDg0NWI0MzZiMjc0ODdi
MWRjMTU3YTE4ODE3ZDFmYmUxN2M0OS4uMGM1M2NkN2NmMTU4OTFjMDUxN2ZkOTMyNDM5Y2UxYjdh
MTkxOTdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU2LDggKzU2LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdM
aXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2ln
bmVkIHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggODUzNTc1N2YyMDY1NTE3MDE1Yjgx
MDQxZmUxMmM2YTA2NTk0ZDZiMS4uZTc4OTEzYmEwNGNiYmM3MzMyMjgzZjA1ZjRiYWFhNTAwMGIz
ZTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKaW5kZXggNDIxOTE1NzkyNTkzNjcy
OTE2YmY3OTkwNTU4ODU1MzlkOGUyNmY2Yy4uZDBlNzRkNTc0MWY2MjU3ZjgwNGU3OTg1Y2VlNmEz
MzIzNDg3ZDM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBJREJGYWN0b3J5X2gKICNkZWZpbmUg
SURCRmFjdG9yeV9oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0OTA5MTYyM2Q4ZGUyM2Y5
YTg3NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4YjgxM2E3YmExMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAtNTcsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4o
MCksIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMp
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3Blbktl
eUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0K
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlv
biwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAwNzYxZjA2ODFi
YmM5ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRl
Zjg4YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDYzNTFlNmZiOGU3NzAwMjYyZjZkYzM1ZGYwMzEyMDk4
MTNiMjA5ZDAuLmJhYzhjZWEwNjVmYzgwZDc3ZWIyNWFhMmFiZWNhYzIxMzYwOTQ4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggNzY4ZWJiYWY0
YTYzNjE5OWI5ZGEwMDI2N2UyYzBkNDc2ZGM5YjgwYS4uMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQx
OTI4NTcyYzljMmIxNjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTWV0YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJNZXRhZGF0YS5oCkBAIC0zOCwzNyArMzgsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFk
YXRhOwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7Ci0gICAgLy8gRklYTUU6IFRoZXNl
IGNhbiBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgotICAgIGVudW0gewotICAgICAgICBO
b0ludFZlcnNpb24gPSAtMSwKLSAgICAgICAgRGVmYXVsdEludFZlcnNpb24gPSAwCi0gICAgfTsK
LQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQotICAgICAgICA6IGludFZlcnNpb24oTm9JbnRW
ZXJzaW9uKQotICAgIHsKLSAgICB9Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRW
ZXJzaW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0
YSB7CisgICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQorICAgIElEQkluZGV4TWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogICAgICAgICA6IG5hbWUobmFtZSkKICAgICAg
ICAgLCBpZChpZCkKLSAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgaW50VmVy
c2lvbihpbnRWZXJzaW9uKQotICAgICAgICAsIG1heE9iamVjdFN0b3JlSWQobWF4T2JqZWN0U3Rv
cmVJZCkKLSAgICB7Ci0gICAgfQotCisgICAgICAgICwga2V5UGF0aChrZXlQYXRoKQorICAgICAg
ICAsIHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KSB7IH0K
ICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIFN0cmluZyB2ZXJzaW9uOwot
ICAgIGludDY0X3QgaW50VmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7Cisg
ICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJvb2wgdW5pcXVlOworICAgIGJvb2wgbXVsdGlF
bnRyeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+IE9iamVjdFN0b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKyAg
ICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIH07CiAKIHN0cnVjdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIHsKQEAgLTg3LDIzICs3MSw2NiBAQCBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSB7CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50OwogICAgIGludDY0X3QgbWF4
SW5kZXhJZDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkluZGV4TWV0YWRhdGE+
IEluZGV4TWFwOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwog
ICAgIEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9
OwogCi1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5kZXhNZXRhZGF0YSgpIHsg
fQotICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQor
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1FOiBUaGVzZSBjYW4gcHJv
YmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAgICAgICAgTm9JbnRWZXJz
aW9uID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAorICAgIH07CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3Rv
cmVNYXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAgICAgOiBpbnRWZXJzaW9u
KE5vSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQogICAgICAgICA6IG5hbWUo
bmFtZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgpCi0gICAg
ICAgICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50cnkpIHsg
fQorICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBpbnRWZXJzaW9uKGludFZl
cnNpb24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RTdG9yZUlkKQorICAg
IHsKKyAgICB9CisKKyAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlKG5hbWUp
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKICAgICBTdHJp
bmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIElEQktleVBhdGgga2V5UGF0aDsKLSAgICBi
b29sIHVuaXF1ZTsKLSAgICBib29sIG11bHRpRW50cnk7CisgICAgU3RyaW5nIHZlcnNpb247Cisg
ICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKKwor
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBmYzY1
NzNhMThhMjg2ZWMwYTYyNWNmNmE1NWRmNjUyZTFhZDdhYmEzLi5kOWQyZWMyODA0OTU5NGUyNzA4
OGQxZmZjZmQyMzIxNjk3NjUxNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIFBhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKICAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOworICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIGluZGV4TmFtZXMtPnNvcnQo
KTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDksNyArMjA5LDcg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5k
ZXhLZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVl
LCB2YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgICAgICBpbmRleEtl
eXMuYXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBp
bmRleE5hbWVzLnNpemUoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQKICAgICAgICAgZWMgPSBOQVRJVkVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICBpZiAobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
aWYgKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpAQCAtNDA5LDcgKzQwOSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgSURCSW5k
ZXhNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOwogICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1l
dGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgbV9tZXRhZGF0YS5pbmRl
eGVzLnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRl
eElkLCBtZXRhZGF0YSk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCkBAIC00NDQs
MTUgKzQ0NCwyNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChu
YW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlk
bid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2Rl
LiBBbmQgdmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRh
aW5zSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0
YS5pbmRleGVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJh
Y2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYmIGlu
ZGV4QmFja2VuZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgw
KTsKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUp
IHsKKyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworCisg
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRh
dGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQpAQCAtNDY3LDIxICs0NzYsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7CisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKKyAgICAgICAgQVNTRVJU
KG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAgIElEQkluZGV4TWFwOjpp
dGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
aW5kZXhNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUo
aXQtPnZhbHVlLT5pZCgpKTsKICAgICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsK
ICAgICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSk7Ci0gICAgICAgIG1f
bWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCmluZGV4IDIzYTMzNjdmNGMzYjU2MzgzNmU1NWFjNDk4ZDc1NzYxZDIwMTA0
NDYuLmQ2YjYzZDgzMjk2MmU2Y2UxZWRjM2JmMzBhNDM2OTBmZjllNzNmYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtMTA3LDcg
KzEwNiw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBAIC0xMTgsMTYgKzExNywyMCBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhO
YW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CisgICAgT3du
UHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3Rvcjxp
bnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0lu
ZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKIAog
ICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKIAogICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2Uo
KSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhJZHMucmVs
ZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9B
Qk9SVF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRo
SW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJu
IHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0aW9u
UHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKK30KIG5hbWVzcGFjZSB7
CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0xNTcsOCArMTYwLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlz
KGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CisgICAgYm9vbCB3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7CisgICAgICAgIGludDY0X3QgaW5k
ZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFiYWNraW5nU3Rv
cmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjgsOCArMTcyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZhdGU6CiAKICAgICBib29sIGFkZGlu
Z0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkzLDEzICsxOTUsMTMgQEAgcHJpdmF0
ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtl
eVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlz
LCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJy
b3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5
V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMs
IFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgpID09IGluZGV4S2V5cy5z
aXplKCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNpemUoKSk7
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFtZXNbaV0s
IGluZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGlu
ZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNC
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgewogCkBA
IC0yMjgsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4
TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
cikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4
S2V5cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwpA
QCAtMjQzLDcgKzI0NSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAKICAgICBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgdGhpcywgcHJpbWFy
eUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9y
TWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMs
IHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAm
ZXJyb3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBkZWFsIHdpdGggZXJy
b3JNZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25seSBmYWlscyBvbiB1bmlxdWVuZXNz
IGNvbnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIkR1
cGxpY2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAg
ICByZXR1cm47CkBAIC0yNTEsNDYgKzI1Myw2OCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgp
OwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQsIG1faW5kZXhlcy5nZXQoaW5k
ZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRl
ci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKmJhY2tpbmdTdG9yZSgp
LCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBt
X21ldGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJm
YWNlKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5h
bWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBp
bmRleElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOworICAgIHJldHVybiBzZXRJbmRleEtl
eXMocHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb25QdHIpOwor
fQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKIAotICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMp
KTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVt
cHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIG5hbWVz
LnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQoreworICAg
IFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7CisgICAgLy8gRklY
TUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4gaWYg
dGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8gcmVt
b3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxsIGdv
IGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2
IGxhbmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKKyAgICAgICAgZm9yIChJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRl
eGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0g
aW5kZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtleTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVyZmFj
ZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
cG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4
TmFtZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhO
YW1lcy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IGluZGV4SWRz
ID0gcG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy0+c2l6
ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVu
dCgpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJh
bnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
T3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5h
bWVzID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJ
ZHMgPSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtl
eXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMgJiYgaW5kZXhLZXlzICYm
IGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CisgICAgQVNTRVJUKGlu
ZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6
ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAKQEAgLTMxNCw3
ICszMzgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJ
bmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAg
ICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBr
ZXksIGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleElkcywg
KmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzMwLDcgKzM1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAg
ICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0
KCksICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
bV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmlu
ZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRl
eEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKSkgewogCiAgICAgICAgICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRh
IHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKGVy
cm9yKTsKQEAgLTM3Myw3ICszOTcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgICAg
ICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+
dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPmtleSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcgKzQzNCw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhl
cy5jb250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICVzIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFpbnMo
aWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgp
ID09IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Miw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgp
OworICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFz
ZSgpOwogfQogCkBAIC00NDIsMjIgKzQ2Niw0MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhcwog
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgo
aW50NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFTU0VSVChpbmRleCk7CiAgICAgcmV0
dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIGluZGV4
KGdldEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoSW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5l
bmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0X3Q+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKIHsKLSAg
ICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBWZWN0b3I8aW50NjRfdD4g
cmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgo
aW50NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRh
aW5zKGluZGV4SWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gbV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTQ2Nyw3ICs1MTEsMTIgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQlRyYW5zYWN0aW9uQmEKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1f
aW5kZXhlcy5yZW1vdmUobmFtZSk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBkZWxldGVJbmRleChnZXRJbmRleElk
KG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCkBAIC01NDEsMjAgKzU5MCwyMCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAgICBWZWN0b3I8SURCSW5kZXhN
ZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQo
KSwgbV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5uYW1lLCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOwor
ICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6
OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIEFTU0VSVChv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkpKTsKLSAgICBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKKyAgICBBU1NFUlQob2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOworICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewogICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+aWQoKSkpOworICAgIG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5pZCgpLCBpbmRleFB0cik7CiB9CiAKIFBh
c3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpAQCAtNTcz
LDcgKzYyMiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrCiAgICAgYmFja2luZ1N0b3JlKCkt
Pm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5k
ZXggOTA4ZTdmMjM4ZWZmMDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVjYS4uYzJlZmQzYjBlM2Ey
MWI2MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApA
QCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOwotICAgIAorICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKKwogICAg
IHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0CiAgICAgewpAQCAtNjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aElu
ZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURC
S2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3Jl
YXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7CkBAIC04NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBjb25z
dCBib29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5j
cmVtZW50OyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9
Ci0gICAgCisKKyAgICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7CisgICAgVmVj
dG9yPGludDY0X3Q+IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKIHByaXZh
dGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCkBAIC05OCw5ICsxMDcs
OSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50
KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBh
c3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKICAgICBzdGF0aWMg
dm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7Ci0gICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NP
d25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5hbWVzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBj
bGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaAppbmRleCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkwNjM4ODFmMWQ0OGQ2OGRk
Li45YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAogICAgIHZpcnR1YWwg
dm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuY3BwCmluZGV4IGUwNzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4YWVlNDc3NzQxY2EuLmIy
MzkwMTYxOWJjYTNhMTA5YWZhNmQyNWE4YThkN2U1ZWY3ODI0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKGludDY0
X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAgbV9kYXRhYmFzZUNhbGxi
YWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cyA9IDA7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNh
Y3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFja2Vu
ZCwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhp
cyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbkJhY2tlbmQsIFZl
Y3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJh
c2UuZ2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZy
b250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gZnJvbnRlbmQ7CiAgICAgbV9yZXN1
bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAxODYwYmZjNTll
M2NhMzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4Li5jNmM2ZTNlMzhmOWFjYTYwNDUzNTBlNzNi
NTIyNzE2ZDBiYzFmM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNr
ZW5kCiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwogICAg
IGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlv
biA9IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbiAm
JiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihE
T01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUg
dW51c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhlYzE1ZTVlYzA3M2Rm
ZmIxZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjQ3MDA1YzNiNzYxZTIwYzI1ZjA4OTEyMWM0NjM3
ZjMwYmE4NzNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUs
IElEQkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIpCiB7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCA9IDA7Ci0g
ICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVz
dCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVz
LCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElE
QlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVz
dCogb3BlbkRCUmVxdWVzdCkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRh
YmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiB7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpKSk7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24o
Y29udGV4dCwgYmFja2VuZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVl
c3QpKSk7CiAgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CkBAIC04OCwxMCArODgsMTEgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZUxlZ2FjeSgpCiB9CiAKIAotSURC
VHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJ
REJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVl
c3QqIG9wZW5EQlJlcXVlc3QpCitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5h
bWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5E
QlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9kYXRhYmFzZShkYikKKyAg
ICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZU5hbWVzKQogICAgICwgbV9vcGVuREJS
ZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fYWN0aXZl
KHRydWUpCkBAIC0xNTUsMTYgKzE1NiwxOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJ
REJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAg
IGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0
U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7Ci0gICAgQVNT
RVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0
b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgotICAgIGlmIChlYykKKyAgICBpZiAoIWlzVmVyc2lvbkNoYW5nZSgpICYmICFtX29iamVj
dFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tl
bmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYm
IG9iamVjdFN0b3JlQmFja2VuZCk7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZW5kKCkpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFkYXRhLmZpbmRPYmpl
Y3RTdG9yZShuYW1lKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3Rv
cmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5oCmluZGV4IDg5OTM5YmY4NTk3NWIxY2I5ZjdmNTBiNTE5N2Y5ZjZhYzMxYmZjOTUuLmNi
OGYwYjljMGIxNGQ2MTBmYjJiZGIzN2EzYzhiNjE2NGQ4YmU0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtMzAsNyArMzAs
NiBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTYsOCAr
NTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZFUlNJT05fQ0hBTkdFID0gMgogICAgIH07CiAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1v
ZGUsIElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3Qq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBNb2RlLCBJREJEYXRh
YmFzZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIE1vZGUsIElE
QkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsK
QEAgLTEyMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOworICAg
IElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgTW9kZSwg
SURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAKICAgICB2b2lkIGVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC0x
NDUsNiArMTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJh
c2U7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIElE
Qk9wZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKICAgICBjb25zdCBNb2RlIG1fbW9kZTsK
ICAgICBib29sIG1fYWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBmMTY2
NTE5NDliYWQzYzViMTUxYmViNGZmNzVmMjVkMDZiNzFhMjY2Li5lMTY1MmQ2OTVkZjg1MzQxYjM2
MDg2ZDg2NzliMTM3NDQwMmZmOGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
MzksMTMgKzM5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
RE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3Jl
SWRzLCBtb2RlLCBkYXRhYmFzZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAg
OiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQorSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFzZShk
YXRhYmFzZSkKQEAgLTU1LDggKzU1LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMKICAgICAs
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKICAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQog
ewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOwotICAgIEFTU0VSVChtX21vZGUgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlz
RW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRD
cmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKIH0KIApAQCAtNjYsMzEgKzY0LDIzIEBAIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGludDY0X3QgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9J
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRG9l
cyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxkbid0IGJlIHRoYXQgc2xvdyBp
biBwcmFjdGljZS4KLSAgICBpZiAobV9tb2RlICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRy
YW5zYWN0aW9uIGNvdWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMg
Y3JlYXRpb24gKHdoZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9y
ZSBjYWxsLgotICAgIC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3Np
YmxlIGluIHRoZSBzcGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAg
IC8vICAgICAgICBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKGlkKTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9
CiAKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIHJldHVybiBvYmplY3RTdG9yZShtX2RhdGFiYXNlLT5nZXRPYmpl
Y3RTdG9yZUlkKG5hbWUpLCBlYyk7Cit9CisKIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCkBAIC0xMDAs
NyArOTAsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhU
YXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZQogICAgICAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQodGFzayk7CiAgICAgZWxzZQogICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBw
ZW5kKHRhc2spOwotICAgIAorCiAgICAgaWYgKGFib3J0VGFzaykKICAgICAgICAgbV9hYm9ydFRh
c2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRl
eCAzNGE5NzU3MGYwMGZiN2EwODRiOGRkMzg5MzQ3YTI1NGEyNTM0ODYyLi40ZTRkZGVjYzExMjM2
OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBA
IC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmgiCkBAIC00NSw3ICs0NCw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqKTsKICAgICBzdGF0aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogZnJvbShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGludGVyZmFjZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4oaW50ZXJmYWNlKTsK
QEAgLTU0LDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFj
a3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGlj
OgogICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1
bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAKICAgICBlbnVt
IFN0YXRlIHsKICAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0LgpA
QCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGFza0V2ZW50VGltZXJGaXJlZChU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vy
c29ycygpOwogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsK
KyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBmNzA3ZjM0YTA5OTg1NGY0MzkyMTgyMzk0YTJmMWU3
MjVjZTA1NzRjLi5kMTFlMTgxMWNlNDM1YmY2N2YwODMzZDNlNTU4MDZiODg3Y2U0ZTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6
CiAgICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgKaW5kZXggYTc1YjdiZTE0MmI5NjVhMTVkNjA2MDM2ZmNmYWQyOGEwOTJjOWFlZi4u
ZTdiOWZjYWZiYmNjMDdkNDY0ZTZkN2NkYzczOWZlNzE2Y2Q1MjJjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklEQkRhdGFiYXNlLmgKaW5kZXggYTQ5MzJlZTI4MjQwMDYyZDE1N2ZjZDAyYTU5YTdiMmYzNzBl
MTcyYi4uZjAyYmJmNDRjNDQ3ZDU3MDhhZjlkNDM3ZWFjZjk1ZjhkNDgwNmVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC01Niw2ICs1
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lv
biwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2Yg
dGhlIFdlYklEQlRyYW5zYWN0aW9uIHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVu
c2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjMsNiArNjQsMTEg
QEAgcHVibGljOgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisg
ICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCkgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQk9iamVjdFN0b3JlLmgKaW5kZXggY2EwMTAzY2RhNmZjM2YzNzJjYWRjYWFiN2Nk
NmNlMzA1YTIyN2QyZS4uOGVhOGRiODY2Zjg0MDc3MjgwY2Q0MzU5YzcyOGZhN2QyODM2MjBiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9y
ZS5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJ
REJLZXk+IFdlYkluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlz
KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1v
ZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtl
eXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBj
b25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleElkcywgY29uc3Qg
V2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9u
Q29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViSURC
S2V5UGF0aCYsIGJvb2wsIGJvb2wsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpCkBAIC02OSwxNCArNzAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+
JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZl
Y3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfTsKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBX
ZWJJREJJbmRleCB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCiAgICAgewogICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KyAgICB2aXJ0dWFsIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBsb25nIGxvbmcpCisgICAgewor
ICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChsb25n
IGxvbmcgaW5kZXhJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2Rl
JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3Bl
bkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChjb25zdCBXZWJJREJL
ZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4
IDgxNmEzMjgxNDcwYjcyOTJmNDNkNDRkMjMyZjMwM2M0ZmJiNWQ4NDYuLmJhYzJkYTg4ZDAzYTQw
OWE5N2UxOTQ4MzdlZjRkMGJiNzdmYTRiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGlj
OgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25n
IGxvbmcsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmNwcAppbmRleCAyOWI4YzRiZjQxZGNhYWZhNjE5ZWI2YTBkMWExNTExMTRj
MjkxZTUzLi5mNmQ5NjQ0NzBlZmI0MTUxNDRmZGMxZDA0MDgyOTA5Y2RjZDhlNTA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHkuY3BwCkBAIC04NSw2ICs4NSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aQogICAgIG1f
d2ViSURCRGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kUHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBh
IHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBh
bGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93
ZWJJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgKnRyYW5zYWN0
aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KKwogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRQcm94eTo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NF
UlQobV93ZWJJREJEYXRhYmFzZSk7CkBAIC0xMDIsNiArMTEwLDE1IEBAIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJh
bnNhY3Rpb24oCiAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUo
dHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQor
eworICAgIE93blB0cjxXZWJJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0ciht
X3dlYklEQkRhdGFiYXNlLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSkpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4pCiB7CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5o
CmluZGV4IGZjODMxZThkZWM0OWE3OWU2MWNhN2NiY2VmNWI0NjdkMWM0YmQ1ZmQuLjkxNmY4MzNh
YjdlZmJmY2Q0MDY2MWVkYTc3ZmE5YWM5NTM4ZGM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaApAQCAtNDYsOCArNDYs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogc3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0
IG1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggMmI5
YjQ0YTdhMWZmY2RkODAyMDc1ZWEwZDM4ZTZiN2MwNzE3NDhhNS4uNmEwZDAyNzcyYjg0NGM3ZWY2
YWMyMGZiY2VjM2NjMzFkMWYzNjE0MiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNzcsNiArNzcs
MTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5w
dXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3Jl
OjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwg
KnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMs
IHdlYkluZGV4S2V5cywgZWMpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMpCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwK
KyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBv
YmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5
ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdl
YklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCks
IGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewog
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC04Nyw2ICs5NSwx
NCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0
SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFu
dGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJl
ciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94
eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblBy
b3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlv
bik7CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXks
IFdlYlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgaW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Q
cm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAv
LyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0
byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDcgKzE0NiwxNSBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZQogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCiAgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShp
bmRleE5hbWVzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cisg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJp
bmc+KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFk
eShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShX
ZWJWZWN0b3I8bG9uZyBsb25nPihpbmRleElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJ
REJUcmFuc2FjdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQxLDYgKzE2NSwxNCBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNv
bnN0IFN0cgogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQoreworICAgIE93
blB0cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5p
bmRleChpbmRleElkKSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKK30K
Kwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJl
bmRlcmVyLApAQCAtMTQ5LDYgKzE4MSwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQgogICAg
IG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5
LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwg
aW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nh
c3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJ
REJPYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5kZXhJZCwgKnRyYW5zYWN0aW9uUHJveHktPmdl
dFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oCmluZGV4IDg0NzBjMWFkOTA1YmMxNTZmZDlmM2I4ZmMxNGVmZjFlNDExZThiZWIuLjc5
MTEzYWU5NTY1YTMxNGRjY2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApA
QCAtNDUsMTYgKzQ1LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90
IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBX
VEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldElu
ZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVh
ZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CisKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4KGludDY0X3QpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdl
PiwgV2ViQ29yZTo6SURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKaW5kZXggODhmOTg1MmFjZWY0YzZlODlhNTg5ZTQ1MjU5
ZTIyYjFmMzg2YjFlNS4uZjA4MzdmZWY2YTQ2ZTFmM2M0ZmRiMjk5OTE0MGUzZWM3YWJhMmU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcApAQCAtNjIsNiArNjIsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpvYmpl
Y3RTdG8KICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShvYmpl
Y3RTdG9yZS5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0
b3JlKGludDY0X3QgaW5kZXhJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgT3duUHRyPFdl
YklEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGFkb3B0UHRyKG1fd2ViSURCVHJhbnNhY3Rp
b24tPm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKSk7CisgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpj
cmVhdGUob2JqZWN0U3RvcmUucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eTo6Y29tbWl0KCkKIHsKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5jb21taXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eS5oCmluZGV4IDdlNzQ4NmJkN2MzMjA2NmNjMDJkNjc2MWM4MDk3YzliY2Rm
NTMzZTUuLmU4ZjJjMzM3NTQ4MzRkZWJlNDQ2OTRkZTA0ZmIwMWNkOWVlNDE4NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0
X3QsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
VGFza0V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJD
YWxsYmFja3NJbXBsLmNwcAppbmRleCBlMDljMWEzZmVkMjQ3ZDJmNTViZTdiOTcyNWQ1YTM5MjUz
YjY5NjY2Li44ZDEyY2ZhM2VhOWJhZTMyZDQ3YzMzNGZjMGUwMTdkMDkwZGRhN2E4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFz
ZUltcGwuY3BwCmluZGV4IGU3MTAyOWRlYjM0ODQ3MTViMTMwZDNhMWI4ZmNkM2Y2MDhjYjA2Y2Iu
LjkwYzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzUsNiAr
NzUsMTEgQEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHIKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+
ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0
ZU9iamVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIG1fZGF0YWJh
c2VCYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworfQorCiB2b2lkIFdlYklE
QkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2Rh
dGFiYXNlQmFja2VuZC0+c2V0VmVyc2lvbih2ZXJzaW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7CkBAIC05
MSw2ICs5NiwxNyBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFu
c2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2Vi
SURCVHJhbnNhY3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAorV2ViSURCVHJhbnNhY3Rpb24q
IFdlYklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9u
Zz4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFZlY3Rvcjxp
bnQ2NF90PiBvYmplY3RTdG9yZUlkTGlzdChvYmplY3RTdG9yZUlkcy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG9iamVjdFN0b3JlSWRMaXN0W2ldID0gb2JqZWN0U3RvcmVJZHNbaV07CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFj
a2VuZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZExpc3QsIG1vZGUpOworICAgIGlmICghdHJh
bnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNh
Y3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKK30KKwogdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNs
b3NlKCkKIHsKICAgICAvLyBVc2UgdGhlIGNhbGxiYWNrcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0
cnVjdG9yIHNvIHRoYXQgdGhlIGJhY2tlbmQgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNzY5YmRmNWQwNWYwYjNiYjFlOGI2NWY0
ZTA5ZmMzMjc1ZWJjYTg2MC4uNjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBs
LmgKQEAgLTU0LDggKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0
U3RvcmUqIGNyZWF0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0
cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmlu
Z0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9y
PGxvbmcgbG9uZz4mIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VDbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggZGQxYzJjOGU1NDBm
ZmViYjM4OGFkMmNjMTM2YjhjZWJmZjA5ZGNiNy4uMmNhNWJmN2M3ZDZiMjljMmUyYTA2ZmJlZmM2
ODZjNTJlYThjNmMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1l
dGFkYXRhLmNwcApAQCAtNDksNiArNDksNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRh
dGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgZm9y
IChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3Rv
cmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9y
ICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7CiAgICAg
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIE9iamVjdFN0b3JlIHdlYk9iamVjdFN0b3JlOworICAgICAg
ICB3ZWJPYmplY3RTdG9yZS5pZCA9IG9iamVjdFN0b3JlLmlkOwogICAgICAgICB3ZWJPYmplY3RT
dG9yZS5uYW1lID0gb2JqZWN0U3RvcmUubmFtZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUua2V5
UGF0aCA9IG9iamVjdFN0b3JlLmtleVBhdGg7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmF1dG9J
bmNyZW1lbnQgPSBvYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50OwpAQCAtNTksNiArNjAsNyBAQCBX
ZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGluZGV4SXRlcmF0b3IgPSBvYmplY3RTdG9yZS5pbmRl
eGVzLmJlZ2luKCk7IGluZGV4SXRlcmF0b3IgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsg
KytpbmRleEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7
CisgICAgICAgICAgICB3ZWJJbmRleC5pZCA9IGluZGV4LmlkOwogICAgICAgICAgICAgd2ViSW5k
ZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5k
ZXgua2V5UGF0aDsKICAgICAgICAgICAgIHdlYkluZGV4LnVuaXF1ZSA9IGluZGV4LnVuaXF1ZTsK
QEAgLTc5LDkgKzgxLDkgQEAgV2ViSURCTWV0YWRhdGE6Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0
YWRhdGEoKSBjb25zdAogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYk9iamVjdFN0
b3JlLmluZGV4ZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGNvbnN0IEluZGV4IHdlYklu
ZGV4ID0gd2ViT2JqZWN0U3RvcmUuaW5kZXhlc1tqXTsKICAgICAgICAgICAgIElEQkluZGV4TWV0
YWRhdGEgaW5kZXgod2ViSW5kZXgubmFtZSwgd2ViSW5kZXguaWQsIHdlYkluZGV4LmtleVBhdGgs
IHdlYkluZGV4LnVuaXF1ZSwgd2ViSW5kZXgubXVsdGlFbnRyeSk7Ci0gICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5uYW1lLCBpbmRleCk7CisgICAgICAgICAgICBvYmpl
Y3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwogICAgICAgICB9Ci0gICAgICAg
IGRiLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUubmFtZSwgb2JqZWN0U3RvcmUpOworICAg
ICAgICBkYi5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7CiAg
ICAgfQogICAgIHJldHVybiBkYjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCmluZGV4IGQ4MTQwOTNmMGY1YjM0MWViMmQ5
OWQ5N2M5MTgyOGFjNTA1MjBkNDUuLjUzMDQ4N2RiMmIzZDFkZTAyOWQ5M2Y0NmJhYTI2YTUwZjY3
OWI5NmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcApAQCAtNzUsNiArNzUsMjMgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2
YWwKICAgICBtX29iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRp
Y19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSks
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRl
eEtleXMsIGVjKTsKIH0KIAordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0
TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5k
ZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCit7Cisg
ICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8bG9uZyBsb25nPiBpbmRleElkcyh3ZWJJbmRleElkcy5zaXplKCkpOworICAgIFZl
Y3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlz
KHdlYkluZGV4S2V5cy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJ
bmRleElkcy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4SWRz
W2ldOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5k
ZXhLZXlzW2ldLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5k
ZXhLZXlzW2ldLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2Vi
SW5kZXhLZXlzW2ldW2pdOworICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7Cisg
ICAgfQorCisgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKK30K
Kwogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJL
ZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVz
LCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKHdlYkluZGV4TmFtZXMu
c2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwpAQCAtOTEsNiArMTA4LDIyIEBAIHZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmlt
YXJ5S2V5LCBjb25zdCBXZWJWCiAgICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHByaW1h
cnlLZXksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCit2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6
c2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYgcHJpbWFyeUtleSwgY29uc3QgV2ViVmVjdG9y
PGxvbmcgbG9uZz4mIHdlYkluZGV4SWRzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYg
d2ViSW5kZXhLZXlzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7Cisg
ICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhJZHMuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5cyh3
ZWJJbmRleEtleXMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5k
ZXhJZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleElkc1tp
XTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlMaXN0KHdlYkluZGV4
S2V5c1tpXS5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYkluZGV4
S2V5c1tpXS5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGluZGV4S2V5TGlzdFtqXSA9IHdlYklu
ZGV4S2V5c1tpXVtqXTsKKyAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OworICAg
IH0KKyAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJZHMs
IGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KCkpOworfQorCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3
ZWJJbmRleE5hbWVzLnNpemUoKSk7CkBAIC05OSw2ICsxMzIsMTQgQEAgdm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
d2ViSW5kZXgKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywg
dHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCit2
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCit7CisgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKHdlYkluZGV4TmFtZXMu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4TmFtZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKKyAgICBtX29i
amVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhJZHMsIHRyYW5zYWN0aW9uLmdldElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKK30KKwogdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OmRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgV2Vi
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRl
RnVuY3Rpb24oa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBlYyk7CkBAIC0xMjUsMTEgKzE2NiwyNCBAQCBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZAogICAg
IHJldHVybiBuZXcgV2ViSURCSW5kZXhJbXBsKGluZGV4KTsKIH0KIAorV2ViSURCSW5kZXgqIFdl
YklEQk9iamVjdFN0b3JlSW1wbDo6aW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCit7Cisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3Jl
LT5pbmRleChvYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7Cit9CisKIHZvaWQgV2Vi
SURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgdHJhbnNhY3Rpb24uZ2V0
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7Cit9CisKIHZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiBr
ZXlSYW5nZSwgV2ViSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlIHRhc2tUeXBlLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIG1fb2JqZWN0U3RvcmUtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIHN0YXRpY19jYXN0PElE
QkN1cnNvcjo6RGlyZWN0aW9uPihkaXJlY3Rpb24pLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKGNhbGxiYWNrcykpLCBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlPih0YXNrVHlwZSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IDdlOWVkMjU3M2NiOTRiODk3YmNm
NTg3NWE1MjMyMjc2MWIxNDMwOGQuLjVkZTNjOWExNWFkOGVmNWY0NjBhODg2YWMxY2RlYWJjY2Jk
NTgyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCkBAIC00NywxNCArNDcsMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXQo
Y29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHB1dFdpdGhJbmRleEtleXMo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9k
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYpOwogICAgIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklE
QktleSYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdm9p
ZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9u
Zz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBzZXRJ
bmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYpOwogICAgIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgV2ViSURCSW5kZXgqIGNyZWF0
ZUluZGV4KGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJLZXlQ
YXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgV2ViSURCSW5kZXgqIGluZGV4KGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYklEQkluZGV4KiBpbmRl
eChsb25nIGxvbmcpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IGRlbGV0ZUluZGV4KGxvbmcgbG9uZywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAKICAgICB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDdXJzb3I6OkRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNh
Y3Rpb246OlRhc2tUeXBlLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGNvdW50KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCA1Y2JiZWU2NjM0YTNiZmYxOTQ3MGQ2Zjc5YjBhYWY0YWI4NzA0YzBmLi42NjE2ZDY3
MWZjMzBjOTdlNjcyNjE0YzFhNDE5OWUzYTdkMDg4NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKQEAgLTU1LDYgKzU1
LDE0IEBAIFdlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0
b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgRXhjCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmpl
Y3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOwogfQogCitXZWJJREJPYmplY3RTdG9yZSogV2ViSURC
VHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZShsb25nIGxvbmcgaW5kZXhJZCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKTsKKyAgICBp
ZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IFdlYklE
Qk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7Cit9CisKIHZvaWQgV2ViSURCVHJhbnNhY3Rp
b25JbXBsOjpjb21taXQoKQogewogICAgIG1fYmFja2VuZC0+Y29tbWl0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDY2
ZTMxNTMwMDBlNzNiMGNlYjc0ZTg3YTI3Zjc4OWZiYjJkZmE3MzMuLjFlZTZhYjgwMTk3ZWY3OGZh
ZmExM2U5NmZkMDVmNzBmMzdiYWQ3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCkBAIC0zOSw5ICszOSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYklEQlRyYW5zYWN0aW9uSW1wbDogcHVibGljIFdlYklEQlRy
YW5zYWN0aW9uIHsKIHB1YmxpYzoKICAgICBXZWJJREJUcmFuc2FjdGlvbkltcGwoV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZp
cnR1YWwgfldlYklEQlRyYW5zYWN0aW9uSW1wbCgpOyAgCisgICAgdmlydHVhbCB+V2ViSURCVHJh
bnNhY3Rpb25JbXBsKCk7CiAKICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RT
dG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25nIGxvbmcgaW5kZXhJZCwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFj
a2VuZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJh
Y2tlbmRUZXN0LmNwcAppbmRleCA4OTM2M2YwMDc3NDRkNDA2MjhkYjU4NmNlOTdiYzQ3NzEzZmJl
ZmFlLi5lOTdiYzdmNmRmOWE0MThjZmY2NTYwZDJjMTIzNGViYzFkM2E2ODQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHAKQEAgLTE1Miw4ICsxNTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRGF0YWJh
c2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIElEQkRhdGFiYXNlTWV0YWRhdGEo
KTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSB7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdM
aXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNo
b3J0IG1vZGUpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171554</attachid>
            <date>2012-10-30 17:09:41 -0700</date>
            <delta_ts>2012-10-31 11:17:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100425-20121030170806.patch</filename>
            <type>text/plain</type>
            <size>113687</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZkNmYzZWQwYWUyNWIz
MDQwZTFhMTA2MGU2NWY4MGM2NWE4YzBiZC4uOGZhOGZjODkwODE1YzZmZWJjZDc0ODUyOWNlNzc4
MzQ1MjM5NzZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgaGFsZiBvZiByZWZhY3Rv
ciBpbnZvbHZlcyBhZGRpbmcgYSBudW1iZXIgb2YgbWV0aG9kcyB0aGF0CisgICAgICAgIGFyZSBp
bnQ2NF90LWJhc2VkIHJhdGhlciB0aGFuIFN0cmluZy1iYXNlZC4gQXMgYSBwYXJ0IG9mIHRoaXMs
IHRoZQorICAgICAgICBJREIqTWV0YWRhdGEgc3RydWN0cyBhbmQgdGhlIGJhY2tlbmQgb2JqZWN0
U3RvcmUvaW5kZXggbWFwcyBhbGwKKyAgICAgICAgdXNlIGludDY0X3QgYXMga2V5cywgcmF0aGVy
IHRoYW4gU3RyaW5nLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGVyZSB3ZXJlIGEgbnVtYmVy
IG9mIGNsZWFudXBzIHRoYXQgY2FtZSBvdXQgb2YgdGhlCisgICAgICAgIHJlZmFjdG9yOgorCisg
ICAgICAgIC0gVGhlIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlcyBhY3RpdmUgaW4gYSB0cmFuc2FjdGlv
biBpcyBub3cKKyAgICAgICAgICBtYWludGFpbmVkIGJ5IHRoZSBmcm9udGVuZCBJREJUcmFuc2Fj
dGlvbiByYXRoZXIgdGhhbiB0aGUgYmFja2VuZAorICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuIFRoaXMgYWxzbyBoYWQgYSBzaW1wbGlmeWluZyByaXBwbGluZworICAgICAgICAg
IGVmZmVjdCB0aHJvdWdoIG90aGVyIGNhbGwgc2lnbmF0dXJlcy4KKworICAgICAgICAtIEkgd2Fz
IGFibGUgdG8gcmVtb3ZlIGFuIGFwcGFyZW50bHkgb2xkIEZJWE1FIGZyb20KKyAgICAgICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIEFTU0VSVC4KKworICAgICAgICAtIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwncyBJbmRl
eFdyaXRlciBjbGFzcyBnb3QgYSBsaXR0bGUKKyAgICAgICAgICBzaW1wbGVyIHNpbmNlIHRoZSBp
ZCBpcyBub3cgZWFzaWx5IGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICBJREJJbmRleE1ldGFk
YXRhLgorCisgICAgICAgIC0gQSBudW1iZXIgb2YgbWV0aG9kcyBnb3Qgc2ltcGxlciBpbiB0aGVp
ciBpbnQ2NF90IHZlcnNpb25zLAorICAgICAgICAgIHNwZWNpZmljYWxseSBkcm9wcGluZyBhIG51
bWJlciBvZiBFeGNlcHRpb25Db2Rlcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2x1
ZSBjb2RlCisgICAgICAgIChnZXRJbmRleElkL2dldEluZGV4SWRzL2dldE9iamVjdFN0b3JlSWQp
IHRoYXQgd2lsbCBnbyBhd2F5IHdpdGgKKyAgICAgICAgdGhlIDJuZCBoYWxmIG9mIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGFzIHRoaXMgaXMganVzdCBhIHJlZmFj
dG9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29y
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YTo6SURCSW5kZXhNZXRhZGF0YSk6CisgICAgICAgIChJ
REJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlTWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6Y29udGFpbnNJbmRleCk6Cisg
ICAgICAgIChJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE6OklEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VNZXRhZGF0YTo6Y29udGFpbnNPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldEluZGV4SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oOgorCiAyMDEyLTEwLTI5ICBBbmR5IEVzdGVzICA8YWVzdGVz
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIHRoYXQgY2F1c2VkIFNWRyBleHRlcm5h
bCByZXNvdXJjZXMgdG8gYmUgYmxvY2tlZCBvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAzZGRkODEwZmU1Nzk5ZDUzMzQ0NmNjOTE2NTk0YmQzODg3NGI2MDY4Li5kNTc0YzliNWMzYmY4
MmQzM2U2NWE5OGNlN2VjY2Q3NmE2OGMyMzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUxIEBACisyMDEyLTEwLTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGFkZCBtZXRob2RzIHRvIHN1cHBvcnQgaWQt
YmFzZWQgYmFja2VuZCBBUElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDA0MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaHJvbWl1bSBQcm94eSBhbmQgV2ViSURCKiBzdXBwb3J0IGZvciBuZXcgaW50
NjRfdC1iYXNlZCBtZXRob2RzLgorCisgICAgICAgICogcHVibGljL1dlYklEQkRhdGFiYXNlLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICog
cHVibGljL1dlYklEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVj
dFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6c2V0SW5k
ZXhLZXlzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4ZXNS
ZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICog
cHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQkRhdGFiYXNlQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OklEQkRh
dGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogc3JjL0lEQkRhdGFi
YXNlQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRQcm94eSk6Cisg
ICAgICAgICogc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dCk6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhL
ZXlzKToKKyAgICAgICAgKFdlYktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldElu
ZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjppbmRleCk6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpk
ZWxldGVJbmRleCk6CisgICAgICAgICogc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Lmg6
CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSk6CisgICAgICAgICogc3JjL0lE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0b3JlKToKKyAgICAgICAgKiBzcmMvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
KToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJN
ZXRhZGF0YTo6b3BlcmF0b3IgSURCRGF0YWJhc2VNZXRhZGF0YSk6CisgICAgICAgICogc3JjL1dl
YklEQlRyYW5zYWN0aW9uSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0
aW9uSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMv
V2ViSURCVHJhbnNhY3Rpb25JbXBsLmg6CisgICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNr
ZW5kVGVzdC5jcHA6CisKIDIwMTItMTAtMjkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE51bGwtY2hlY2sgV2ViVmlld0ltcGw6Om1f
Y2xpZW50IGJlZm9yZSBjYWxsaW5nIGludmFsaWRhdGVSZWN0KCkgb24gaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggYzM5NDA2OGM1
Mjc5NTBjNzAwMDA3OGE1Y2Q0NDU0M2RkNDIwOWI5ZS4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5NzVi
YjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJhY2tz
X2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCkBAIC02Nyw3ICs2Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIEZyb20gSURCRmFjdG9yLmRlbGV0ZURhdGFiYXNlKCksIElEQk9iamVj
dFN0b3JlL0lEQkluZGV4LmdldCgpLCBJREJPYmplY3RTdG9yZS5kZWxldGUoKSwgSURCT2JqZWN0
U3RvcmUuY2xlYXIoKQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSA9IDA7Ci0gICAgCisK
ICAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUoKQogICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7CiAgICAgLy8g
RnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAyYzkxZDcyZjdlZGZjMjZi
MmM0MjMzNmM3NTlkOGU0ZmNhNTlhMDg4Li5mY2NiNDU2YzVkNjhhMjE0NjdmNThmMDljZGM2Mjdm
YzMwZmQ5NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
ICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5h
cHBlbmQoaXQtPmtleSk7CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+dmFs
dWUubmFtZSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmpl
Y3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjbwogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aFN0
cmluZyk7CiAgICAgfQogCi0gICAgaWYgKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5z
KG5hbWUpKSB7CisgICAgaWYgKG1fbWV0YWRhdGEuY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDcgKzE3MCw3IEBAIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvCiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9i
amVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBvYmplY3RTdG9y
ZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0g
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG1ldGFkYXRhKTsKKyAgICBtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKICAgICArK21f
bWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZDsKIAogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwpAQCAtMTg3LDcgKzE4
Nyw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisKKyAgICBp
bnQ2NCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7Cisg
ICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElk
KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQgSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewogICAgICAg
ICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUpOwot
ICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKICAgICB9CiB9CiAK
QEAgLTI0MSw2ICsyNDMsMTMgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJh
c2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yZU5hbWVzLT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc09iamVjdFN0
b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNhY3Rp
b24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBPcGVy
YXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBhdCBh
bnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKICAgICAv
LyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCkBAIC0yNTAsNyArMjU5LDcg
QEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgbW9k
ZSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCAqc3RvcmVOYW1l
cywgbW9kZSwgdGhpcyk7CiAgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGMzNmQ4YzMyOWEwZWZmOGI2YmJlNWUxZGNhYjEzODE1
ZWRlNGExNTMuLjdkYTU0MzJkMzgyYzFiNGUwOGRlNWViYTViODA5NmM2NGRiZjU0NmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuY3BwCkBAIC0xNjcsMTMgKzE2NywxMyBAQCBJREJEYXRhYmFzZU1ldGFk
YXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICAvLyBGSVhN
RTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChO
KS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZlcnkg
dGltZS4KICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwogICAg
IGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMu
YmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKKyAg
ICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52YWx1
ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCiBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFT
U0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworICAgIEFTU0VSVCghbV9vYmpl
Y3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0
aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCBhdXRvSW5jcmVt
ZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKSk7CiAg
ICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CkBAIC0xOTMsNyArMTkzLDcg
QEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICBtX29iamVjdFN0
b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFz
ZSgpOwogfQogCkBAIC0yMDcsMTcgKzIwNywyNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCiAg
ICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1QYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBpZCkK
IHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIHJldHVybiBtX29i
amVjdFN0b3Jlcy5nZXQoaWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbnQ2NF90IElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmdldE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAgZm9y
IChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdp
bigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQt
PnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKIAogICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9y
ZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMjI3LDcgKzIzNyw3IEBAIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJUcmFuc2FjdGlvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBt
X29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CisgICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKGlk
KTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUlu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQpAQCAtNDIxLDIwICs0MzEsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5nT3BlbkNhbGxzLmlz
RW1wdHkoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmpl
Y3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiwgdW5zaWduZWQgc2hvcnQgbW9kZSwg
RXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9y
ZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2Jq
ZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7CisgICAgLy8gRklYTUU6IEZpcnN0IHBhcmFtZXRl
ciBpc24ndCB1c2VkIGZvciBhbnl0aGluZyB5ZXQgYW55d2F5LCBhbmQgdGhpcyBtZXRob2QgaXMg
Z29pbmcgYXdheS4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoVmVjdG9yPGludDY0X3Q+
KCksIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbi5nZXQo
KSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRy
YW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVk
IHNob3J0IG1vZGUpCit7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBt
b2RlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUuZ2V0KCkpOwpAQCAtNjExLDIxICs2MjAsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0
YT4gb2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21ldGFk
YXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNpemUo
KTsgaSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLm5hbWUs
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNbaV0p
KTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOwogfQog
CiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBPYmpl
Y3RTdG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3Rv
cmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmpl
Y3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworICAgIEFTU0VSVChkYXRhYmFz
ZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPmlkKCkpKTsKKyAgICBkYXRh
YmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAogdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQogewog
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZVB0ciA9IG9i
amVjdFN0b3JlOwotICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5z
KG9iamVjdFN0b3JlUHRyLT5uYW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMu
c2V0KG9iamVjdFN0b3JlUHRyLT5uYW1lKCksIG9iamVjdFN0b3JlUHRyKTsKKyAgICBBU1NFUlQo
IWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+aWQoKSkp
OworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPmlkKCks
IG9iamVjdFN0b3JlUHRyKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNl
dFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2
NF90IHByZXZpb3VzSW50VmVyc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCAxMWE2OWQwYmZk
YTY2YjA2MjAxZDM5NjNjMGVlMTQ0YWI4OGUzNWU4Li5mNWNlODFkNmNiNDE1ZTM5ZTIxYTQ1NWEy
MjAyMjkxMTQ0YmYzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC02MiwxMiArNjIsMTUgQEAg
cHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwg
SURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0
b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUoZ2V0T2JqZWN0U3RvcmVJZChuYW1lKSwg
dHJhbnNhY3Rpb25QdHIsIGVjKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVO
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0KTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUoaW50NjRfdCBpZCk7CisgICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsg
fQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKQEAgLTEwMCw3ICsxMDMsNyBAQCBwcml2YXRlOgog
ICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3Rv
cnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIg
dG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNr
ZW5kSW1wbD4gbV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+IE9i
amVjdFN0b3JlTWFwOwogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAg
T3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNGNkMDg0NWI0MzZiMjc0ODdiMWRj
MTU3YTE4ODE3ZDFmYmUxN2M0OS4uMGM1M2NkN2NmMTU4OTFjMDUxN2ZkOTMyNDM5Y2UxYjdhMTkx
OTdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU2LDggKzU2LDEwIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0
KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVk
IHNob3J0IG1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggODUzNTc1N2YyMDY1NTE3MDE1YjgxMDQx
ZmUxMmM2YTA2NTk0ZDZiMS4uZTc4OTEzYmEwNGNiYmM3MzMyMjgzZjA1ZjRiYWFhNTAwMGIzZTBi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5j
cHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0j
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKaW5kZXggNDIxOTE1NzkyNTkzNjcyOTE2
YmY3OTkwNTU4ODU1MzlkOGUyNmY2Yy4uZDBlNzRkNTc0MWY2MjU3ZjgwNGU3OTg1Y2VlNmEzMzIz
NDg3ZDM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnkuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBJREJGYWN0b3J5X2gKICNkZWZpbmUgSURC
RmFjdG9yeV9oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5oCmluZGV4IGUxMGMzNmQyMmI5NWI4Yjg0OTA5MTYyM2Q4ZGUyM2Y5YTg3
NTFlNWQuLjNlMDRlZTFkNGM1YWNkZTUzMjY1Mjk1ZWJmZTU4YjgxM2E3YmExMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAtNTcsNiArNTcsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVybiBt
X21ldGFkYXRhLnVuaXF1ZTsgfQogICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLmlkOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29k
ZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5
UmFuZ2UqPigwKSwgZWMpOyB9CkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhj
ZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCks
IGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9w
ZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwg
SURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KICAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAwNzYxZjA2ODFiYmM5
ZGIwNmQ1Nzc5OWY3MDM5ZWQ3YTE2ODRkZjg1Li5jOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRlZjg4
YmJjNThjZWZmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguY3BwCmluZGV4IDYzNTFlNmZiOGU3NzAwMjYyZjZkYzM1ZGYwMzEyMDk4MTNi
MjA5ZDAuLmJhYzhjZWEwNjVmYzgwZDc3ZWIyNWFhMmFiZWNhYzIxMzYwOTQ4YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRP
TVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggNzY4ZWJiYWY0YTYz
NjE5OWI5ZGEwMDI2N2UyYzBkNDc2ZGM5YjgwYS4uMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQxOTI4
NTcyYzljMmIxNjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTWV0YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJNZXRhZGF0YS5oCkBAIC0zOCwzNyArMzgsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFkYXRh
OwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7Ci0gICAgLy8gRklYTUU6IFRoZXNlIGNh
biBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgotICAgIGVudW0gewotICAgICAgICBOb0lu
dFZlcnNpb24gPSAtMSwKLSAgICAgICAgRGVmYXVsdEludFZlcnNpb24gPSAwCi0gICAgfTsKLQot
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQotICAgICAgICA6IGludFZlcnNpb24oTm9JbnRWZXJz
aW9uKQotICAgIHsKLSAgICB9Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJz
aW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7
CisgICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQorICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogICAgICAgICA6IG5hbWUobmFtZSkKICAgICAgICAg
LCBpZChpZCkKLSAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgaW50VmVyc2lv
bihpbnRWZXJzaW9uKQotICAgICAgICAsIG1heE9iamVjdFN0b3JlSWQobWF4T2JqZWN0U3RvcmVJ
ZCkKLSAgICB7Ci0gICAgfQotCisgICAgICAgICwga2V5UGF0aChrZXlQYXRoKQorICAgICAgICAs
IHVuaXF1ZSh1bmlxdWUpCisgICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KSB7IH0KICAg
ICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIFN0cmluZyB2ZXJzaW9uOwotICAg
IGludDY0X3QgaW50VmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7CisgICAg
SURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJvb2wgdW5pcXVlOworICAgIGJvb2wgbXVsdGlFbnRy
eTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+
IE9iamVjdFN0b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKyAgICBz
dGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIH07CiAKIHN0cnVjdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIHsKQEAgLTg3LDIzICs3MSw2NiBAQCBzdHJ1Y3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSB7CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50OwogICAgIGludDY0X3QgbWF4SW5k
ZXhJZDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkluZGV4TWV0YWRhdGE+IElu
ZGV4TWFwOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOworCisgICAg
dHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwogICAg
IEluZGV4TWFwIGluZGV4ZXM7CisKKyAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9Owog
Ci1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7Ci0gICAgSURCSW5kZXhNZXRhZGF0YSgpIHsgfQot
ICAgIElEQkluZGV4TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQorc3Ry
dWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgeworICAgIC8vIEZJWE1FOiBUaGVzZSBjYW4gcHJvYmFi
bHkgYmUgY29sbGFwc2VkIGludG8gMC4KKyAgICBlbnVtIHsKKyAgICAgICAgTm9JbnRWZXJzaW9u
ID0gLTEsCisgICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAorICAgIH07CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3RvcmVN
YXA7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKKyAgICAgICAgOiBpbnRWZXJzaW9uKE5v
SW50VmVyc2lvbikKKyAgICB7CisgICAgfQorICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qg
aW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQogICAgICAgICA6IG5hbWUobmFt
ZSkKICAgICAgICAgLCBpZChpZCkKLSAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgpCi0gICAgICAg
ICwgdW5pcXVlKHVuaXF1ZSkKLSAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50cnkpIHsgfQor
ICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBpbnRWZXJzaW9uKGludFZlcnNp
b24pCisgICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhPYmplY3RTdG9yZUlkKQorICAgIHsK
KyAgICB9CisKKyAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CisgICAgeworICAgICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZXMuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElk
OworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlKG5hbWUpICE9
IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKICAgICBTdHJpbmcg
bmFtZTsKICAgICBpbnQ2NF90IGlkOwotICAgIElEQktleVBhdGgga2V5UGF0aDsKLSAgICBib29s
IHVuaXF1ZTsKLSAgICBib29sIG11bHRpRW50cnk7CisgICAgU3RyaW5nIHZlcnNpb247CisgICAg
aW50NjRfdCBpbnRWZXJzaW9uOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKKworICAg
IE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBmYzY1NzNh
MThhMjg2ZWMwYTYyNWNmNmE1NWRmNjUyZTFhZDdhYmEzLi5kOWQyZWMyODA0OTU5NGUyNzA4OGQx
ZmZjZmQyMzIxNjk3NjUxNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAogICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKICAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAo
SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9t
ZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOworICAgICAgICBpbmRl
eE5hbWVzLT5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsK
ICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDksNyArMjA5LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5kZXhL
ZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2
YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAg
ICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOwogICAgICAgICBpbmRleEtleXMu
YXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRl
eE5hbWVzLnNpemUoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQKICAgICAgICAgZWMgPSBOQVRJVkVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBpZiAobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgaWYg
KG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgewogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpA
QCAtNDA5LDcgKzQwOSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgSURCSW5kZXhN
ZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50
cnkpOwogICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1ldGFk
YXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
ICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgbV9tZXRhZGF0YS5pbmRleGVz
LnNldChuYW1lLCBtZXRhZGF0YSk7CisgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRleElk
LCBtZXRhZGF0YSk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCkBAIC00NDQsMTUg
KzQ0NCwyNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2luZGV4
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1l
LCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0
IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBB
bmQgdmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5z
SW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05P
VF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0YS5p
bmRleGVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVz
LmVuZCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tl
bmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYmIGluZGV4
QmFja2VuZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0
ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlv
bi5nZXQoKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgwKTsK
KyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4
ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpIHsK
KyAgICAgICAgICAgIGluZGV4TWV0YWRhdGEgPSAmaXQtPnZhbHVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworCisgICAg
UmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRhdGEs
IGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAg
IG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgp
OwogfQpAQCAtNDY3LDIxICs0NzYsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUp
KSB7CisgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKKyAgICAgICAgQVNTRVJUKG1f
bWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAgIElEQkluZGV4TWFwOjppdGVy
YXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0ICE9IG1faW5k
ZXhNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQt
PnZhbHVlLT5pZCgpKTsKICAgICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsKICAg
ICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwogICAgICAgICB9Ci0KLSAgICAgICAg
QVNTRVJUKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSk7Ci0gICAgICAgIG1fbWV0
YWRhdGEuaW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCmluZGV4IDIzYTMzNjdmNGMzYjU2MzgzNmU1NWFjNDk4ZDc1NzYxZDIwMTA0NDYu
LmQ2YjYzZDgzMjk2MmU2Y2UxZWRjM2JmMzBhNDM2OTBmZjllNzNmYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQmlu
ZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtMTA3LDcgKzEw
Niw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQogCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwogCkBAIC0xMTgsMTYgKzExNywyMCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9u
OjpSRUFEX09OTFkpOwogCi0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhOYW1l
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CisgICAgT3duUHRy
PFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxpbnQ2
NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0luZGV4
S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKIAogICAg
IEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKIAogICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBw
dXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2UoKSwg
bmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUs
IGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhJZHMucmVsZWFz
ZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9S
VF9FUlIpKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIHB1
dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0aW9uUHRy
LCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKK30KIG5hbWVzcGFjZSB7CiBj
bGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0xNTcsOCArMTYwLDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlzKGNv
bnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CisgICAgYm9vbCB3cml0ZUluZGV4
S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKICAgICB7CisgICAgICAgIGludDY0X3QgaW5kZXhJ
ZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUu
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNjgsOCArMTcyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9Ci0KIHByaXZhdGU6CiAKICAgICBib29sIGFkZGluZ0tl
eUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLApAQCAtMTkzLDEzICsxOTUsMTMgQEAgcHJpdmF0ZToK
IH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdh
c0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVjdG9y
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBW
ZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JN
ZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5V2Fz
R2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMsIFZl
Y3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1l
c3NhZ2UpCiB7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgpID09IGluZGV4S2V5cy5zaXpl
KCkpOworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNpemUoKSk7CiAK
LSAgICBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRl
eEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1l
cy5zaXplKCk7IGkrKykKLSAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFtZXNbaV0sIGlu
ZGV4S2V5c1tpXSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmRleElkcy5zaXplKCk7IGkrKykKKyAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4
SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCiAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNCZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgewogCkBAIC0y
MjgsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFt
ZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikK
IHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5
cyIpOwogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwpAQCAt
MjQzLDcgKzI0NSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAKICAgICBWZWN0b3I8T3du
UHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgdGhpcywgcHJpbWFyeUtl
eSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVz
c2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHBy
aW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJy
b3JNZXNzYWdlKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBkZWFsIHdpdGggZXJyb3JN
ZXNzYWdlIGhlcmUuIG1ha2VJbmRleFdyaXRlcnMgb25seSBmYWlscyBvbiB1bmlxdWVuZXNzIGNv
bnN0cmFpbnQgZXJyb3JzLgogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIkR1cGxp
Y2F0ZSBpbmRleCBrZXlzIGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yNTEsNDYgKzI1Myw2OCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwot
ICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LmdldCgpLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQsIG1faW5kZXhlcy5nZXQoaW5kZXhX
cml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+
d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKmJhY2tpbmdTdG9yZSgpLCB0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBtX21l
dGFkYXRhLmlkKSkgewogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5h
bWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNl
KQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0
cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRl
eElkcyA9IGdldEluZGV4SWRzKGluZGV4TmFtZXMpOworICAgIHJldHVybiBzZXRJbmRleEtleXMo
cHJwUHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb25QdHIpOworfQor
Cit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uSW50ZXJmYWNlKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKIAotICAgIE93blB0cjxWZWN0b3I8U3Ry
aW5nPiA+IG5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsK
KyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvbkludGVyZmFjZSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soCiAgICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRp
dmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIG5hbWVzLnJl
bGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwsIG9iamVj
dFN0b3JlLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZl
Y3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQoreworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7CisgICAgLy8gRklYTUU6
IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4gaWYgdGhl
IG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8gcmVtb3Zl
IGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxsIGdvIGF3
YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2IGxh
bmRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKKyAgICAgICAgZm9yIChJbmRleE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gaW5k
ZXhOYW1lc1tpXSkgeworICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtleTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVyZmFjZSk7
Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eGVzUmVhZHlJbnRlcm5hbCIpOwotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4TmFt
ZXMgPSBwb3BJbmRleE5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1l
cy0+c2l6ZSgpOyArK2kpCisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IGluZGV4SWRzID0g
cG9wSW5kZXhJZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy0+c2l6ZSgp
OyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgp
OwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNh
Y3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3du
UHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NP
d25QdHI8VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRl
eEtleXM+ID4gcG9wSW5kZXhLZXlzKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBBU1NFUlQodHJhbnNh
Y3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJL
ZXk+IGtleSA9IHBycEtleTsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5hbWVz
ID0gcG9wSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJZHMg
PSBwb3BJbmRleElkczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMg
PSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKGluZGV4TmFtZXMgJiYgaW5kZXhLZXlzICYmIGlu
ZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CisgICAgQVNTRVJUKGluZGV4
SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgp
KTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3Jl
bWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAKQEAgLTMxNCw3ICsz
MzgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJbmRl
eFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBp
ZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBrZXks
IGtleVdhc0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMs
ICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleElkcywgKmlu
ZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzMwLDcgKzM1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBJ
bmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAg
IGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCks
ICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+bV9t
ZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4
TmFtZSgpKS0+aWQoKSkpIHsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRleEtl
eXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKSwg
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKSkgewogCiAgICAgICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRv
IHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKGVycm9y
KTsKQEAgLTM3Myw3ICszOTcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgICAgICAg
ICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxl
dGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+dmFs
dWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPmtleSwgcmVjb3JkSWRlbnRp
Zmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNj
ZXNzKTsKICAgICAgICAgICAgIH0KIApAQCAtNDEwLDcgKzQzNCw3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhlcy5j
b250YWlucyhuYW1lKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICVzIiwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFpbnMoaWQp
LCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtl
eVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgpID09
IG5hbWUpOwpAQCAtNDI4LDcgKzQ1Miw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwor
ICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgp
OwogfQogCkBAIC00NDIsMjIgKzQ2Niw0MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhcwogICAg
IHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoaW50
NjRfdCBpbmRleElkKQogewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgg
PSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOworICAgIEFTU0VSVChpbmRleCk7CiAgICAgcmV0dXJu
IGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIGluZGV4KGdl
dEluZGV4SWQobmFtZSkpOworfQorCitpbnQ2NF90IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoSW5kZXhNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQo
KTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKKyAgICAg
ICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworVmVjdG9yPGludDY0X3Q+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKIHsKLSAgICBB
U1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBWZWN0b3I8aW50NjRfdD4gcmVz
dWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50
NjRfdCBpbmRleElkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5z
KGluZGV4SWQpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0g
bV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20o
dHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRy
YW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTQ2Nyw3ICs1MTEsMTIgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IElEQlRyYW5zYWN0aW9uQmEKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1faW5k
ZXhlcy5yZW1vdmUobmFtZSk7CisgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBkZWxldGVJbmRleChnZXRJbmRleElkKG5h
bWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCkBAIC01NDEsMjAgKzU5MCwyMCBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAgICBWZWN0b3I8SURCSW5kZXhNZXRh
ZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQoKSwg
bV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5uYW1lLCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOworICAg
ICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNy
ZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIEFTU0VSVChvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkpKTsKLSAgICBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKKyAgICBBU1NFUlQob2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOworICAgIG9iamVjdFN0b3Jl
LT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewogICAgIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1faW5k
ZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1faW5k
ZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOworICAgIEFTU0VSVCghb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+aWQoKSkpOworICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5pZCgpLCBpbmRleFB0cik7CiB9CiAKIFBhc3NS
ZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpAQCAtNTczLDcg
KzYyMiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJh
dG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrCiAgICAgYmFja2luZ1N0b3JlKCktPm1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90
PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXgg
OTA4ZTdmMjM4ZWZmMDA4NGE3ZDM2OWUwMjI1NDQwODM1ZmI2NjVjYS4uYzJlZmQzYjBlM2EyMWI2
MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAt
NTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOwotICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKKwogICAgIHN0
YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0
CiAgICAgewpAQCAtNjUsMTQgKzY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4
S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtl
eXM+JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKwogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRl
SW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mICwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgo
aW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CkBAIC04NiwxMCArOTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQogICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBjb25zdCBi
b29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5jcmVt
ZW50OyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAgICBp
bnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9Ci0g
ICAgCisKKyAgICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9y
PGludDY0X3Q+IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKIHByaXZhdGU6
CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCkBAIC05OCw5ICsxMDcsOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsK
IAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NP
d25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5k
ZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKICAgICBzdGF0aWMgdm9p
ZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7
Ci0gICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25Q
dHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBjbGVh
ckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaAppbmRleCBjNmVhMTNjNTAxOWQ4Y2Y4MzBiZjFkZjkwNjM4ODFmMWQ0OGQ2OGRkLi45
YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWViMjc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNjMsMTYgKzYzLDIyIEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9p
ZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGlu
dDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY291bnQo
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3Qu
Y3BwCmluZGV4IGUwNzBiOGJkNzZkYjA5NjIzOGRjYjBiMzU4NWY4YWVlNDc3NzQxY2EuLmIyMzkw
MTYxOWJjYTNhMTA5YWZhNmQyNWE4YThkN2U1ZWY3ODI0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC04OSw3
ICs4OSw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKGludDY0X3Qg
b2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjCiAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9
IDA7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFja2VuZCwg
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhpcyk7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbkJhY2tlbmQsIFZlY3Rv
cjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJhc2Uu
Z2V0KCksIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZyb250
ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gZnJvbnRlbmQ7CiAgICAgbV9yZXN1bHQg
PSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAxODYwYmZjNTllM2Nh
Mzg0MmY3NTY1YWRlMTA2NGNlMWJmODNjM2E4Li5jNmM2ZTNlMzhmOWFjYTYwNDUzNTBlNzNiNTIy
NzE2ZDBiYzFmM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5k
CiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lP
Tl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIGJhY2tlbmQsIFZlY3RvcjxTdHJpbmc+KCksIElEQlRyYW5zYWN0aW9u
OjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwogICAgIGJh
Y2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlvbiA9
IGZyb250ZW5kOwogCkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNhdWdo
dEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbiAmJiAh
bV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihET01F
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgdW51
c2VkOyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSB1bnVzZWQ7CiAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmFib3J0KHVudXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhlYzE1ZTVlYzA3M2RmZmIx
ZmIxNjEwZWU4NjQwMzIxZTA0OWE0MmEuLjQ3MDA1YzNiNzYxZTIwYzI1ZjA4OTEyMWM0NjM3ZjMw
YmE4NzNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElE
QkRhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFz
ZSogZGIpCiB7CiAgICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCA9IDA7Ci0gICAg
cmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7
CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVzLCBt
b2RlLCBkYiwgb3BlbkRCUmVxdWVzdCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRy
YW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVzdCog
b3BlbkRCUmVxdWVzdCkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBvYmplY3RTdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFz
ZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCiB7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24oY29u
dGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpKSk7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24oY29u
dGV4dCwgYmFja2VuZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3Qp
KSk7CiAgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiB0cmFu
c2FjdGlvbi5yZWxlYXNlKCk7CiB9CkBAIC04OCwxMCArODgsMTEgQEAgY29uc3QgQXRvbWljU3Ry
aW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZUxlZ2FjeSgpCiB9CiAKIAotSURCVHJh
bnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJU
cmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3Qq
IG9wZW5EQlJlcXVlc3QpCitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IGJhY2tlbmQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVz
LCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJl
cXVlc3QqIG9wZW5EQlJlcXVlc3QpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhp
cykKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9kYXRhYmFzZShkYikKKyAgICAs
IG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZU5hbWVzKQogICAgICwgbV9vcGVuREJSZXF1
ZXN0KG9wZW5EQlJlcXVlc3QpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fYWN0aXZlKHRy
dWUpCkBAIC0xNTUsMTYgKzE1NiwxOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgIGlm
IChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7Ci0gICAgQVNTRVJU
KCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0b3Jl
LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNh
LgotICAgIGlmIChlYykKKyAgICBpZiAoIWlzVmVyc2lvbkNoYW5nZSgpICYmICFtX29iamVjdFN0
b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQg
PSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBBU1NFUlQoIWVjICYmIG9i
amVjdFN0b3JlQmFja2VuZCk7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRh
ZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YTo6
T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMu
ZW5kKCkpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFkYXRhLmZpbmRPYmplY3RT
dG9yZShuYW1lKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3RvcmVC
YWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0
b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRl
ZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCmluZGV4IDg5OTM5YmY4NTk3NWIxY2I5ZjdmNTBiNTE5N2Y5ZjZhYzMxYmZjOTUuLmNiOGYw
YjljMGIxNGQ2MTBmYjJiZGIzN2EzYzhiNjE2NGQ4YmU0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtMzAsNyArMzAsNiBA
QAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NRXJyb3IuaCIK
LSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTYsOCArNTUs
OCBAQCBwdWJsaWM6CiAgICAgICAgIFZFUlNJT05fQ0hBTkdFID0gMgogICAgIH07CiAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1vZGUs
IElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3QqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBNb2RlLCBJREJEYXRhYmFz
ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIE1vZGUsIElEQkRh
dGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9u
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsKQEAg
LTEyMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrcz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOworICAgIElE
QlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgTW9kZSwgSURC
RGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAKICAgICB2b2lkIGVucXVldWVFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC0xNDUs
NiArMTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7
CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIElEQk9w
ZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKICAgICBjb25zdCBNb2RlIG1fbW9kZTsKICAg
ICBib29sIG1fYWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBmMTY2NTE5
NDliYWQzYzViMTUxYmViNGZmNzVmMjVkMDZiNzFhMjY2Li5lMTY1MmQ2OTVkZjg1MzQxYjM2MDg2
ZDg2NzliMTM3NDQwMmZmOGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzks
MTMgKzM5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoRE9N
U3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3JlSWRz
LCBtb2RlLCBkYXRhYmFzZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWdu
ZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAgOiBt
X29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQorSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBk
YXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAgLCBt
X21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFzZShkYXRh
YmFzZSkKQEAgLTU1LDggKzU1LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMKICAgICAsIG1f
cGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKICAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQogewot
ICAgIEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOwotICAgIEFTU0VSVChtX21vZGUgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlzRW1w
dHkoKSk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVh
dGVUcmFuc2FjdGlvbih0aGlzKTsKIH0KIApAQCAtNjYsMzEgKzY0LDIzIEBAIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0
b3JlKGludDY0X3QgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3N0YXRlID09
IEZpbmlzaGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZB
TElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRG9lcyBh
IGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxkbid0IGJlIHRoYXQgc2xvdyBpbiBw
cmFjdGljZS4KLSAgICBpZiAobV9tb2RlICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5H
RSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRyYW5z
YWN0aW9uIGNvdWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMgY3Jl
YXRpb24gKHdoZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9yZSBj
YWxsLgotICAgIC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3NpYmxl
IGluIHRoZSBzcGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAgIC8v
ICAgICAgICBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKGlkKTsKKyAgICBBU1NF
UlQob2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAK
K1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiBvYmplY3RTdG9yZShtX2RhdGFiYXNlLT5nZXRPYmplY3RT
dG9yZUlkKG5hbWUpLCBlYyk7Cit9CisKIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCkBAIC0xMDAsNyAr
OTAsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhUYXNr
VHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZQogICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQodGFzayk7CiAgICAgZWxzZQogICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5k
KHRhc2spOwotICAgIAorCiAgICAgaWYgKGFib3J0VGFzaykKICAgICAgICAgbV9hYm9ydFRhc2tR
dWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRleCAz
NGE5NzU3MGYwMGZiN2EwODRiOGRkMzg5MzQ3YTI1NGEyNTM0ODYyLi40ZTRkZGVjYzExMjM2OTZj
YTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmgiCkBAIC00NSw3ICs0NCw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7
CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZElt
cGwqKTsKICAgICBzdGF0aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogZnJvbShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGludGVyZmFjZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4oaW50ZXJmYWNlKTsKQEAg
LTU0LDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3Mp
IHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgog
ICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAKICAgICBlbnVtIFN0
YXRlIHsKICAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0LgpAQCAt
ODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGFza0V2ZW50VGltZXJGaXJlZChUaW1l
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29y
cygpOwogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsKKyAg
ICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBtX21vZGU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaAppbmRleCBmNzA3ZjM0YTA5OTg1NGY0MzkyMTgyMzk0YTJmMWU3MjVj
ZTA1NzRjLi5kMTFlMTgxMWNlNDM1YmY2N2YwODMzZDNlNTU4MDZiODg3Y2U0ZTM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgKaW5kZXggYTc1YjdiZTE0MmI5NjVhMTVkNjA2MDM2ZmNmYWQyOGEwOTJjOWFlZi4uZTdi
OWZjYWZiYmNjMDdkNDY0ZTZkN2NkYzczOWZlNzE2Y2Q1MjJjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QkRhdGFiYXNlLmgKaW5kZXggYTQ5MzJlZTI4MjQwMDYyZDE1N2ZjZDAyYTU5YTdiMmYzNzBlMTcy
Yi4uZjAyYmJmNDRjNDQ3ZDU3MDhhZjlkNDM3ZWFjZjk1ZjhkNDgwNmVmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC01Niw2ICs1Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGxv
bmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwg
V2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgdGhl
IFdlYklEQlRyYW5zYWN0aW9uIHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjMsNiArNjQsMTEgQEAg
cHVibGljOgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisgICAg
eworICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNsb3NlKCkgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYklEQk9iamVjdFN0b3JlLmgKaW5kZXggY2EwMTAzY2RhNmZjM2YzNzJjYWRjYWFiN2NkNmNl
MzA1YTIyN2QyZS4uOGVhOGRiODY2Zjg0MDc3MjgwY2Q0MzU5YzcyOGZhN2QyODM2MjBiMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5o
CkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJREJL
ZXk+IFdlYkluZGV4S2V5czsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNv
bnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+
JiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25z
dCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleElkcywgY29uc3QgV2Vi
VmVjdG9yPFdlYkluZGV4S2V5cz4mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29k
ZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBX
ZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViSURCS2V5
UGF0aCYsIGJvb2wsIGJvb2wsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9u
Q29kZSYpCkBAIC02OSwxNCArNzAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25z
dCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+Jiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3Qg
V2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfTsKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJ
REJJbmRleCB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4KGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCiAgICAgewogICAgICAgICBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAg
ICB2aXJ0dWFsIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBsb25nIGxvbmcpCisgICAgeworICAg
ICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChsb25nIGxv
bmcgaW5kZXhJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChjb25zdCBXZWJJREJLZXlS
YW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4IDgx
NmEzMjgxNDcwYjcyOTJmNDNkNDRkMjMyZjMwM2M0ZmJiNWQ4NDYuLmJhYzJkYTg4ZDAzYTQwOWE5
N2UxOTQ4MzdlZjRkMGJiNzdmYTRiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGljOgog
ICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25nIGxv
bmcsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFj
a2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFj
a2VuZFByb3h5LmNwcAppbmRleCAyOWI4YzRiZjQxZGNhYWZhNjE5ZWI2YTBkMWExNTExMTRjMjkx
ZTUzLi5mNmQ5NjQ0NzBlZmI0MTUxNDRmZGMxZDA0MDgyOTA5Y2RjZDhlNTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHku
Y3BwCkBAIC04NSw2ICs4NSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aQogICAgIG1fd2Vi
SURCRGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsICp0cmFuc2FjdGlvblByb3h5LT5n
ZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
UHJveHk6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwg
aW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nh
c3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJ
REJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgKnRyYW5zYWN0aW9u
UHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KKwogdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRQcm94eTo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQo
bV93ZWJJREJEYXRhYmFzZSk7CkBAIC0xMDIsNiArMTEwLDE1IEBAIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJhbnNh
Y3Rpb24oCiAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJh
bnNhY3Rpb24ucmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQorewor
ICAgIE93blB0cjxXZWJJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0cihtX3dl
YklEQkRhdGFiYXNlLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSkpOworICAgIGlm
ICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIElEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKK30KKwog
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4pCiB7CiAgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oCmlu
ZGV4IGZjODMxZThkZWM0OWE3OWU2MWNhN2NiY2VmNWI0NjdkMWM0YmQ1ZmQuLjkxNmY4MzNhYjdl
ZmJmY2Q0MDY2MWVkYTc3ZmE5YWM5NTM4ZGM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaApAQCAtNDYsOCArNDYsMTAg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50
LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogc3RvcmVO
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0IG1v
ZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFi
YXNlQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggMmI5YjQ0
YTdhMWZmY2RkODAyMDc1ZWEwZDM4ZTZiN2MwNzE3NDhhNS4uNmEwZDAyNzcyYjg0NGM3ZWY2YWMy
MGZiY2VjM2NjMzFkMWYzNjE0MiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNzcsNiArNzcsMTQg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXRX
aXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQ
dXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMsIHdl
YkluZGV4S2V5cywgZWMpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRl
eEtleXMpCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0
byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAg
ICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmpl
Y3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0g
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Cisg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklE
Qk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwo
Y2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGlu
ZGV4SWRzLCBpbmRleEtleXMpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewogICAg
IC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVy
IHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC04Nyw2ICs5NSwxNCBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0
cjxJREJLZXk+IHBycFByaW1hcnlLZXksCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5k
ZXhLZXlzKHBycFByaW1hcnlLZXksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRyYW5z
YWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCit2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwK
KyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBv
YmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5
ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIFdl
YlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgaW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Qcm94
eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHk6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBU
aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBh
IHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDcgKzE0NiwxNSBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGluZGV4TmFtZQogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCiAgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRl
eE5hbWVzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CisgICAg
bV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJpbmc+
KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7
Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJW
ZWN0b3I8bG9uZyBsb25nPihpbmRleElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJU
cmFuc2FjdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQxLDYgKzE2NSwxNCBAQCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNvbnN0
IFN0cgogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVh
c2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQoreworICAgIE93blB0
cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5pbmRl
eChpbmRleElkKSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKK30KKwog
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFy
YW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRl
cmVyLApAQCAtMTQ5LDYgKzE4MSwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQgogICAgIG1f
d2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5LT5n
ZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50
ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1w
bGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJP
YmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5kZXhJZCwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdl
YklEQlRyYW5zYWN0aW9uKCksIGVjKTsKK30KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBh
IHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94
eS5oCmluZGV4IDg0NzBjMWFkOTA1YmMxNTZmZDlmM2I4ZmMxNGVmZjFlNDExZThiZWIuLjc5MTEz
YWU5NTY1YTMxNGRjY2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApAQCAt
NDUsMTYgKzQ1LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9k
ZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0
IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rp
b24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0
cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6
OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4
ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHko
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7CisKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4
KGludDY0X3QpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwg
V2ViQ29yZTo6SURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHAKaW5kZXggODhmOTg1MmFjZWY0YzZlODlhNTg5ZTQ1MjU5ZTIy
YjFmMzg2YjFlNS4uZjA4MzdmZWY2YTQ2ZTFmM2M0ZmRiMjk5OTE0MGUzZWM3YWJhMmU4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmNwcApAQCAtNjIsNiArNjIsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpvYmplY3RT
dG8KICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZShvYmplY3RT
dG9yZS5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9iamVjdFN0b3Jl
KGludDY0X3QgaW5kZXhJZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgT3duUHRyPFdlYklE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGFkb3B0UHRyKG1fd2ViSURCVHJhbnNhY3Rpb24t
Pm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKSk7CisgICAgaWYgKCFvYmplY3RTdG9yZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpjcmVh
dGUob2JqZWN0U3RvcmUucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eTo6Y29tbWl0KCkKIHsKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5jb21taXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5oCmluZGV4IDdlNzQ4NmJkN2MzMjA2NmNjMDJkNjc2MWM4MDk3YzliY2RmNTMz
ZTUuLmU4ZjJjMzM3NTQ4MzRkZWJlNDQ2OTRkZTA0ZmIwMWNkOWVlNDE4NjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3Qs
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFz
a0V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
Q2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxs
YmFja3NJbXBsLmNwcAppbmRleCBlMDljMWEzZmVkMjQ3ZDJmNTViZTdiOTcyNWQ1YTM5MjUzYjY5
NjY2Li44ZDEyY2ZhM2VhOWJhZTMyZDQ3YzMzNGZjMGUwMTdkMDkwZGRhN2E4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAi
SURCQ3Vyc29yQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFi
YXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUlt
cGwuY3BwCmluZGV4IGU3MTAyOWRlYjM0ODQ3MTViMTMwZDNhMWI4ZmNkM2Y2MDhjYjA2Y2IuLjkw
YzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzUsNiArNzUs
MTEgQEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHIKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+ZGVs
ZXRlT2JqZWN0U3RvcmUobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmRlbGV0ZU9i
amVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIG1fZGF0YWJhc2VC
YWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5nZXRJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworfQorCiB2b2lkIFdlYklEQkRh
dGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2RhdGFi
YXNlQmFja2VuZC0+c2V0VmVyc2lvbih2ZXJzaW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKGNhbGxiYWNrcykpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7CkBAIC05MSw2
ICs5NiwxNyBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2Fj
dGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2ViSURC
VHJhbnNhY3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAorV2ViSURCVHJhbnNhY3Rpb24qIFdl
YklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4m
IG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFZlY3RvcjxpbnQ2
NF90PiBvYmplY3RTdG9yZUlkTGlzdChvYmplY3RTdG9yZUlkcy5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9i
amVjdFN0b3JlSWRMaXN0W2ldID0gb2JqZWN0U3RvcmVJZHNbaV07CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFja2Vu
ZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZExpc3QsIG1vZGUpOworICAgIGlmICghdHJhbnNh
Y3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNhY3Rp
b25JbXBsKHRyYW5zYWN0aW9uKTsKK30KKwogdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNsb3Nl
KCkKIHsKICAgICAvLyBVc2UgdGhlIGNhbGxiYWNrcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVj
dG9yIHNvIHRoYXQgdGhlIGJhY2tlbmQgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNzY5YmRmNWQwNWYwYjNiYjFlOGI2NWY0ZTA5
ZmMzMjc1ZWJjYTg2MC4uNjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgK
QEAgLTU0LDggKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3Rv
cmUqIGNyZWF0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYs
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
bG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmlu
ZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZp
cnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xp
c3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAg
dmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxv
bmcgbG9uZz4mIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQg
Zm9yY2VDbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggZGQxYzJjOGU1NDBmZmVi
YjM4OGFkMmNjMTM2YjhjZWJmZjA5ZGNiNy4uMmNhNWJmN2M3ZDZiMjljMmUyYTA2ZmJlZmM2ODZj
NTJlYThjNmMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
TWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFk
YXRhLmNwcApAQCAtNDksNiArNDksNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEo
Y29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgZm9yIChJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3RvcmVJ
dGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9yICE9
IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7CiAgICAgICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIE9iamVjdFN0b3JlIHdlYk9iamVjdFN0b3JlOworICAgICAgICB3
ZWJPYmplY3RTdG9yZS5pZCA9IG9iamVjdFN0b3JlLmlkOwogICAgICAgICB3ZWJPYmplY3RTdG9y
ZS5uYW1lID0gb2JqZWN0U3RvcmUubmFtZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUua2V5UGF0
aCA9IG9iamVjdFN0b3JlLmtleVBhdGg7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmF1dG9JbmNy
ZW1lbnQgPSBvYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50OwpAQCAtNTksNiArNjAsNyBAQCBXZWJJ
REJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRh
ZGF0YSYgbWV0YWRhdGEpCiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5k
ZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGluZGV4SXRlcmF0b3IgPSBvYmplY3RTdG9yZS5pbmRleGVz
LmJlZ2luKCk7IGluZGV4SXRlcmF0b3IgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsgKytp
bmRleEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7Cisg
ICAgICAgICAgICB3ZWJJbmRleC5pZCA9IGluZGV4LmlkOwogICAgICAgICAgICAgd2ViSW5kZXgu
bmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5kZXgu
a2V5UGF0aDsKICAgICAgICAgICAgIHdlYkluZGV4LnVuaXF1ZSA9IGluZGV4LnVuaXF1ZTsKQEAg
LTc5LDkgKzgxLDkgQEAgV2ViSURCTWV0YWRhdGE6Om9wZXJhdG9yIElEQkRhdGFiYXNlTWV0YWRh
dGEoKSBjb25zdAogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYk9iamVjdFN0b3Jl
LmluZGV4ZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGNvbnN0IEluZGV4IHdlYkluZGV4
ID0gd2ViT2JqZWN0U3RvcmUuaW5kZXhlc1tqXTsKICAgICAgICAgICAgIElEQkluZGV4TWV0YWRh
dGEgaW5kZXgod2ViSW5kZXgubmFtZSwgd2ViSW5kZXguaWQsIHdlYkluZGV4LmtleVBhdGgsIHdl
YkluZGV4LnVuaXF1ZSwgd2ViSW5kZXgubXVsdGlFbnRyeSk7Ci0gICAgICAgICAgICBvYmplY3RT
dG9yZS5pbmRleGVzLnNldChpbmRleC5uYW1lLCBpbmRleCk7CisgICAgICAgICAgICBvYmplY3RT
dG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwogICAgICAgICB9Ci0gICAgICAgIGRi
Lm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUubmFtZSwgb2JqZWN0U3RvcmUpOworICAgICAg
ICBkYi5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7CiAgICAg
fQogICAgIHJldHVybiBkYjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCmluZGV4IGQ4MTQwOTNmMGY1YjM0MWViMmQ5OWQ5
N2M5MTgyOGFjNTA1MjBkNDUuLjg1YmFjMTNiMzQ4MDBkNDIwZjFjZDE4NzYwYmQ5NTYzOGNkNjRl
NWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0
b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0
U3RvcmVJbXBsLmNwcApAQCAtNzUsNiArNzUsMjMgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWwK
ICAgICBtX29iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19j
YXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElE
QkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9u
LmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRleEtl
eXMsIGVjKTsKIH0KIAordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9k
ZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJ
ZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCit7CisgICAg
QVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAgICBW
ZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhJZHMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5cyh3ZWJJ
bmRleEtleXMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhJ
ZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleElkc1tpXTsK
KyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlMaXN0KHdlYkluZGV4S2V5
c1tpXS5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYkluZGV4S2V5
c1tpXS5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGluZGV4S2V5TGlzdFtqXSA9IHdlYkluZGV4
S2V5c1tpXVtqXTsKKyAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OworICAgIH0K
KworICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJDYWxsYmFja3NQ
cm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7Cit9CisKIHZv
aWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBw
cmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywgY29u
c3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVCh3ZWJJbmRleE5hbWVzLnNpemUo
KSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKQEAgLTkxLDYgKzEwOCwyMiBAQCB2b2lkIFdlYklE
Qk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYgcHJpbWFyeUtl
eSwgY29uc3QgV2ViVgogICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5
LCBpbmRleE5hbWVzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSgpKTsKIH0KIAordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldElu
ZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3Rvcjxsb25n
IGxvbmc+JiB3ZWJJbmRleElkcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYklu
ZGV4S2V5cywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIEFT
U0VSVCh3ZWJJbmRleElkcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CisgICAgVmVj
dG9yPGludDY0X3Q+IGluZGV4SWRzKHdlYkluZGV4SWRzLnNpemUoKSk7CisgICAgVmVjdG9yPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleXMod2ViSW5k
ZXhLZXlzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4SWRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5kZXhJZHNbaV07Cisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3ZWJJbmRleEtleXNb
aV0uc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJJbmRleEtleXNb
aV0uc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpbmRleEtleUxpc3Rbal0gPSB3ZWJJbmRleEtl
eXNbaV1bal07CisgICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlzdDsKKyAgICB9Cisg
ICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHByaW1hcnlLZXksIGluZGV4SWRzLCBpbmRl
eEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsK
K30KKwogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMod2ViSW5k
ZXhOYW1lcy5zaXplKCkpOwpAQCAtOTksNiArMTMyLDE0IEBAIHZvaWQgV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYklu
ZGV4CiAgICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KGluZGV4TmFtZXMsIHRyYW5z
YWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKIH0KIAordm9pZCBX
ZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9u
ZyBsb25nPiYgd2ViSW5kZXhOYW1lcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uKQoreworICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJbmRleE5hbWVzLnNpemUo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytp
KQorICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4TmFtZXNbaV07CisgICAgbV9vYmplY3RT
dG9yZS0+c2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7Cit9CisKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBs
OjpkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0
aW9uKGtleVJhbmdlLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNr
cykpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMp
OwpAQCAtMTI1LDExICsxNjYsMjQgQEAgV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1w
bDo6aW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2QKICAgICByZXR1
cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7CiB9CiAKK1dlYklEQkluZGV4KiBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmluZGV4KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkKQoreworICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9vYmplY3RTdG9yZS0+aW5k
ZXgob2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOworfQorCiB2b2lkIFdlYklEQk9i
amVjdFN0b3JlSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsIHRyYW5zYWN0aW9uLmdldElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CiB9CiAKK3ZvaWQgV2ViSURCT2JqZWN0
U3RvcmVJbXBsOjpkZWxldGVJbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBtX29iamVjdFN0b3JlLT5kZWxldGVJbmRleChvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworfQorCiB2b2lkIFdlYklE
Qk9iamVjdFN0b3JlSW1wbDo6b3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFu
Z2UsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIFdlYklEQlRyYW5zYWN0aW9uOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4oZGlyZWN0aW9uKSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9w
dFB0cihjYWxsYmFja3MpKSwgc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOjpUYXNrVHlwZT4odGFza1R5cGUpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UoKSwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJPYmplY3RTdG9yZUltcGwuaAppbmRleCA3ZTllZDI1NzNjYjk0Yjg5N2JjZjU4NzVh
NTIzMjI3NjFiMTQzMDhkLi41ZGUzYzlhMTVhZDhlZjVmNDYwYTg4NmFjMWNkZWFiY2NiZDU4MmY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9y
ZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9y
ZUltcGwuaApAQCAtNDcsMTQgKzQ3LDE5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0KGNvbnN0
IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBj
b25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViVmVjdG9y
PFdlYkluZGV4S2V5cz4mKTsKICAgICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkm
LCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9y
PFdlYkluZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOworICAgIHZvaWQgc2V0
SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBp
bmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJik7CiAgICAgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPFdl
YlN0cmluZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOworICAgIHZvaWQgc2V0SW5kZXhl
c1JlYWR5KGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mKTsKICAgICB2b2lkIGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBjbGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFdlYklEQkluZGV4KiBjcmVhdGVJbmRl
eChsb25nIGxvbmcsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYs
IGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwg
V2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJJREJJbmRleCogaW5kZXgobG9u
ZyBsb25nKTsKICAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkZWxl
dGVJbmRleChsb25nIGxvbmcsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2Vi
SURCQ3Vyc29yOjpEaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYklEQlRyYW5zYWN0aW9u
OjpUYXNrVHlwZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBjb3VudChjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKaW5k
ZXggNWNiYmVlNjYzNGEzYmZmMTk0NzBkNmY3OWIwYWFmNGFiODcwNGMwZi4uNjYxNmQ2NzFmYzMw
Yzk3ZTY3MjYxNGMxYTQxOTllM2E3ZDA4ODU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC01NSw2ICs1NSwxNCBA
QCBXZWJJREJPYmplY3RTdG9yZSogV2ViSURCVHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIEV4YwogICAgIHJldHVybiBuZXcgV2ViSURCT2JqZWN0U3Rv
cmVJbXBsKG9iamVjdFN0b3JlKTsKIH0KIAorV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQlRyYW5z
YWN0aW9uSW1wbDo6b2JqZWN0U3RvcmUobG9uZyBsb25nIGluZGV4SWQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVj
dFN0b3JlID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShpbmRleElkLCBlYyk7CisgICAgaWYgKCFv
YmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBXZWJJREJPYmpl
Y3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOworfQorCiB2b2lkIFdlYklEQlRyYW5zYWN0aW9uSW1w
bDo6Y29tbWl0KCkKIHsKICAgICBtX2JhY2tlbmQtPmNvbW1pdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCA2NmUzMTUz
MDAwZTczYjBjZWI3NGU4N2EyN2Y3ODlmYmIyZGZhNzMzLi4xZWU2YWI4MDE5N2VmNzhmYWZhMTNl
OTZmZDA1ZjcwZjM3YmFkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaApAQCAtMzksOSArMzksMTAgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBXZWJJREJUcmFuc2FjdGlvbkltcGw6IHB1YmxpYyBXZWJJREJUcmFuc2Fj
dGlvbiB7CiBwdWJsaWM6CiAgICAgV2ViSURCVHJhbnNhY3Rpb25JbXBsKFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2aXJ0dWFs
IH5XZWJJREJUcmFuc2FjdGlvbkltcGwoKTsgIAorICAgIHZpcnR1YWwgfldlYklEQlRyYW5zYWN0
aW9uSW1wbCgpOwogCiAgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBX
ZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUobG9uZyBsb25nIGluZGV4SWQsIFdlYkV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lk
IGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5k
VGVzdC5jcHAKaW5kZXggODkzNjNmMDA3NzQ0ZDQwNjI4ZGI1ODZjZTk3YmM0NzcxM2ZiZWZhZS4u
ZTk3YmM3ZjZkZjlhNDE4Y2ZmNjU2MGQyYzEyMzRlYmMxZDNhNjg0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3Bw
CkBAIC0xNTIsOCArMTUyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0
YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBJREJEYXRhYmFzZU1ldGFkYXRhKCk7IH0K
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBj
cmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgeyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCog
c3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25lZCBzaG9ydCBt
b2RlKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171690</attachid>
            <date>2012-10-31 11:17:14 -0700</date>
            <delta_ts>2012-11-01 10:39:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100425-20121031111537.patch</filename>
            <type>text/plain</type>
            <size>113640</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY3YjM1MDU4MWZkNTIx
ZjE5Y2ZhNDY4N2FjOGE0MDczMjE0ZWRkOC4uNjlhNTk5NjQzODJkYjFlMjZhMzJmODNhYTkyNzhk
NTk2YTRhZjM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBGaXJzdCBoYWxmIG9mIHJlZmFjdG9yIGlu
dm9sdmVzIGFkZGluZyBhIG51bWJlciBvZiBtZXRob2RzIHRoYXQKKyAgICAgICAgYXJlIGludDY0
X3QtYmFzZWQgcmF0aGVyIHRoYW4gU3RyaW5nLWJhc2VkLiBBcyBhIHBhcnQgb2YgdGhpcywgdGhl
CisgICAgICAgIElEQipNZXRhZGF0YSBzdHJ1Y3RzIGFuZCB0aGUgYmFja2VuZCBvYmplY3RTdG9y
ZS9pbmRleCBtYXBzIGFsbAorICAgICAgICB1c2UgaW50NjRfdCBhcyBrZXlzLCByYXRoZXIgdGhh
biBTdHJpbmcuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoZXJlIHdlcmUgYSBudW1iZXIgb2Yg
Y2xlYW51cHMgdGhhdCBjYW1lIG91dCBvZiB0aGUKKyAgICAgICAgcmVmYWN0b3I6CisKKyAgICAg
ICAgLSBUaGUgbGlzdCBvZiBvYmplY3Qgc3RvcmVzIGFjdGl2ZSBpbiBhIHRyYW5zYWN0aW9uIGlz
IG5vdworICAgICAgICAgIG1haW50YWluZWQgYnkgdGhlIGZyb250ZW5kIElEQlRyYW5zYWN0aW9u
IHJhdGhlciB0aGFuIHRoZSBiYWNrZW5kCisgICAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC4gVGhpcyBhbHNvIGhhZCBhIHNpbXBsaWZ5aW5nIHJpcHBsaW5nCisgICAgICAgICAgZWZm
ZWN0IHRocm91Z2ggb3RoZXIgY2FsbCBzaWduYXR1cmVzLgorCisgICAgICAgIC0gSSB3YXMgYWJs
ZSB0byByZW1vdmUgYW4gYXBwYXJlbnRseSBvbGQgRklYTUUgZnJvbQorICAgICAgICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3JlIGFuZCByZXBsYWNlIGl0IHdpdGggYW4g
QVNTRVJULgorCisgICAgICAgIC0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCdzIEluZGV4V3Jp
dGVyIGNsYXNzIGdvdCBhIGxpdHRsZQorICAgICAgICAgIHNpbXBsZXIgc2luY2UgdGhlIGlkIGlz
IG5vdyBlYXNpbHkgYXZhaWxhYmxlIGluIHRoZQorICAgICAgICAgIElEQkluZGV4TWV0YWRhdGEu
CisKKyAgICAgICAgLSBBIG51bWJlciBvZiBtZXRob2RzIGdvdCBzaW1wbGVyIGluIHRoZWlyIGlu
dDY0X3QgdmVyc2lvbnMsCisgICAgICAgICAgc3BlY2lmaWNhbGx5IGRyb3BwaW5nIGEgbnVtYmVy
IG9mIEV4Y2VwdGlvbkNvZGVzLgorCisgICAgICAgIFRoZXJlIGlzIGFsc28gc29tZSBnbHVlIGNv
ZGUKKyAgICAgICAgKGdldEluZGV4SWQvZ2V0SW5kZXhJZHMvZ2V0T2JqZWN0U3RvcmVJZCkgdGhh
dCB3aWxsIGdvIGF3YXkgd2l0aAorICAgICAgICB0aGUgMm5kIGhhbGYgb2YgdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNQorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkgYXMgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3Iu
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpnZXRPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3Jl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmpl
Y3RTdG9yZUZyb21NYXApOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YWRkT2JqZWN0U3RvcmVUb01hcCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleE1ldGFkYXRhOjpJREJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQklu
ZGV4TWV0YWRhdGEpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpjb250YWluc0luZGV4KToKKyAgICAg
ICAgKElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YTo6SURCRGF0YWJhc2VNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhOjpjb250YWluc09iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6aW5kZXhOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEluZGV4SWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2V0SW5kZXhJZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXApOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9wZW5EQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVz
dDo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmg6CisKIDIwMTItMTAtMzEgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAg
PGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAgICAgICAgUmVzZXQgYmluZGluZyB0ZXN0IHJl
c3VsdCBhZnRlciByMTMyOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA4YjVkMGNm
M2M5YmU1ODhlMDc0OGNhOGY0ZGQ2OWFiYTYyMTAyNzEuLjZhYmI0MjRmNDVjMTVkYmMzN2JhYzZi
NjJjM2ZiZTYyZmY0ZTU4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTEgQEAKKzIwMTItMTAtMjUgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIEluZGV4ZWREQjogYWRkIG1ldGhvZHMgdG8gc3VwcG9ydCBpZC1iYXNlZCBiYWNr
ZW5kIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDQyNQorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQ2hy
b21pdW0gUHJveHkgYW5kIFdlYklEQiogc3VwcG9ydCBmb3IgbmV3IGludDY0X3QtYmFzZWQgbWV0
aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6cHV0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4S2V5cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpzZXRJbmRleGVzUmVhZHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbjo6b2JqZWN0
U3RvcmUpOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJhY2tlbmRQ
cm94eTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94
eS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpwdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyk6CisgICAgICAg
IChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgpOgorICAg
ICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgpOgor
ICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5OjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAgICAgICog
c3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6Om9wZXJh
dG9yIElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFuc2FjdGlv
bkltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYklEQlRyYW5zYWN0
aW9uSW1wbC5oOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwOgor
CiAyMDEyLTEwLTMxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZW1vdmUgY29kZSB0byBoaWRlL3Jlc2hvdyB0ZXh0IGNhcmV0IGZvciBQYWdlUG9wdXBzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmluZGV4
IGMzOTQwNjhjNTI3OTUwYzcwMDAwNzhhNWNkNDQ1NDNkZDQyMDliOWUuLmIzZWM0YjI3MGYzYTU2
OGUzZGY5OTc1YmIyOTE4MTI1Nzk1ZWQ3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaWZuZGVmIElE
QkNhbGxiYWNrc19oCiAjZGVmaW5lIElEQkNhbGxiYWNrc19oCiAKLSNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5j
bHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIklEQktleS5oIgpAQCAtNjcsNyAr
NjYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGcm9tIElEQkZhY3Rvci5kZWxldGVEYXRhYmFzZSgp
LCBJREJPYmplY3RTdG9yZS9JREJJbmRleC5nZXQoKSwgSURCT2JqZWN0U3RvcmUuZGVsZXRlKCks
IElEQk9iamVjdFN0b3JlLmNsZWFyKCkKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKCkgPSAw
OwotICAgIAorCiAgICAgLy8gRnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKICAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAw
OwogICAgIC8vIEZyb20gSURCQ3Vyc29yLmFkdmFuY2UoKS9jb250aW51ZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggMmM5MWQ3
MmY3ZWRmYzI2YjJjNDIzMzZjNzU5ZDhlNGZjYTU5YTA4OC4uZmNjYjQ1NmM1ZDY4YTIxNDY3ZjU4
ZjA5Y2RjNjI3ZmMzMGZkOTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAg
IFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6
Y3JlYXRlKCk7CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAh
PSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3Rv
cmVOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOworICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBl
bmQoaXQtPnZhbHVlLm5hbWUpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0xNDIsNyArMTQyLDcgQEAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRo
KGtleVBhdGhTdHJpbmcpOwogICAgIH0KIAotICAgIGlmIChtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhuYW1lKSkgeworICAgIGlmIChtX21ldGFkYXRhLmNvbnRhaW5zT2JqZWN0U3Rv
cmUobmFtZSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlO
VF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE3MCw3ICsxNzAsNyBAQCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjbwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0
YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKICAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwg
b2JqZWN0U3RvcmVCYWNrZW5kLnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChuYW1lLCBtZXRhZGF0YSk7
CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7
CiAgICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7CiAKICAgICBtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKQEAg
LTE4Nyw3ICsxODcsOSBAQCB2b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSkg
eworCisgICAgaW50NjQgb2JqZWN0U3RvcmVJZCA9IG1fbWV0YWRhdGEuZmluZE9iamVjdFN0b3Jl
KG5hbWUpOworICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkludmFsaWRJZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9U
X0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NSw3ICsxOTcsNyBAQCB2
b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwg
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMp
IHsKICAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRl
ZChuYW1lKTsKLSAgICAgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOwor
ICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CiAg
ICAgfQogfQogCkBAIC0yNDEsNiArMjQzLDEzIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rv
cmVOYW1lcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fbWV0YWRhdGEuY29udGFp
bnNPYmplY3RTdG9yZShzdG9yZU5hbWVzLT5pdGVtKGkpKSkgeworICAgICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3
IHRyYW5zYWN0aW9uIHN5bmNocm9ub3VzbHkuIExvY2tzIGFyZSBhY3F1aXJlZCBhc3luY2hyb25v
dXNseS4gT3BlcmF0aW9ucwogICAgIC8vIGNhbiBiZSBxdWV1ZWQgYWdhaW5zdCB0aGUgdHJhbnNh
Y3Rpb24gYXQgYW55IHBvaW50LiBUaGV5IHdpbGwgc3RhcnQgZXhlY3V0aW5nIGFzIHNvb24gYXMg
dGhlCiAgICAgLy8gYXBwcm9wcmlhdGUgbG9ja3MgaGF2ZSBiZWVuIGFjcXVpcmVkLgpAQCAtMjUw
LDcgKzI1OSw3IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIEFTU0VSVChlYyk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShjb250ZXh0LCB0cmFuc2FjdGlvbkJh
Y2tlbmQsIG1vZGUsIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwg
KnN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOwogICAgIHRyYW5zYWN0aW9uQmFja2VuZC0+c2V0Q2Fs
bGJhY2tzKHRyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFz
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBjMzZkOGMzMjlhMGVmZjhiNmJiZTVl
MWRjYWIxMzgxNWVkZTRhMTUzLi43ZGE1NDMyZDM4MmMxYjRlMDhkZTVlYmE1YjgwOTZjNjRkYmY1
NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTY3LDEzICsxNjcsMTMgQEAgSURCRGF0
YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiAg
ICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgYSB3YXkgdG8ga2VlcCBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5nZXQoTikuaW5kZXhlcyB1cCB0byBkYXRlIHJhdGhlciB0aGFuIHJlZ2VuZXJhdGluZyB0
aGlzIGV2ZXJ5IHRpbWUuCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX21ldGFk
YXRhKTsKICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2Jq
ZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRh
dGEoKSk7CisgICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPnZhbHVlLT5pZCgp
LCBpdC0+dmFsdWUtPm1ldGFkYXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAogUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBBU1NF
UlQoIW1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKGlkKSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpjcmVhdGUodGhpcywgSURCT2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBpZCwga2V5UGF0aCwg
YXV0b0luY3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5k
ZXhJZCkpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwpAQCAtMTkz
LDcgKzE5Myw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAg
bV9vYmplY3RTdG9yZXMuc2V0KGlkLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0
b3JlLnJlbGVhc2UoKTsKIH0KIApAQCAtMjA3LDE3ICsyMDcsMjcgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLAogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpCitQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGlu
dDY0X3QgaWQpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChuYW1lKTsKKyAgICBy
ZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
aW50NjRfdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkp
OworICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RT
dG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQt
PmtleTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBpZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKGlk
KSk7CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlz
OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1f
b2JqZWN0U3RvcmVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQoaWQpOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKQEAgLTIyNyw3ICsy
MzcsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3RpbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOworICAgIG1fb2JqZWN0U3RvcmVz
LnJlbW92ZShpZCk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2Jq
ZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKQEAgLTQyMSwyMCArNDMxLDE5IEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgQVNTRVJUKG1fcGVuZGluZ09w
ZW5DYWxscy5pc0VtcHR5KCkpOwogfQogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5n
TGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCosIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U3RvcmVOYW1lcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7Ci0gICAgICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOworICAgIC8vIEZJWE1FOiBGaXJz
dCBwYXJhbWV0ZXIgaXNuJ3QgdXNlZCBmb3IgYW55dGhpbmcgeWV0IGFueXdheSwgYW5kIHRoaXMg
bWV0aG9kIGlzIGdvaW5nIGF3YXkuCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKFZlY3Rv
cjxpbnQ2NF90PigpLCBtb2RlLCB0aGlzKTsKICAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNh
Y3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CiAKK1Bh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIHJldHVybiB0cmFuc2FjdGlvbihvYmplY3RT
dG9yZUlkcywgbW9kZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTYxMSwyMSArNjIwLDIxIEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3JlcygpCiAgICAgVmVjdG9yPElEQk9iamVjdFN0
b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9y
ZXMobV9tZXRhZGF0YS5pZCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0
b3Jlcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jl
c1tpXS5uYW1lLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVzW2ldKSk7CisgICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZXNbaV0u
aWQsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNb
aV0pKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9y
ZUZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gcHJwT2JqZWN0U3RvcmUpCiB7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlID0gcHJwT2JqZWN0U3RvcmU7Ci0gICAgQVNTRVJUKGRhdGFiYXNlLT5t
X29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+bmFtZSgpKSk7Ci0gICAgZGF0YWJh
c2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZS0+bmFtZSgpKTsKKyAgICBBU1NF
UlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5pZCgpKSk7
CisgICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZS0+aWQoKSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmVQdHIgPSBvYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+bmFtZSgpKSk7Ci0gICAgZGF0YWJhc2UtPm1fb2Jq
ZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZVB0ci0+bmFtZSgpLCBvYmplY3RTdG9yZVB0cik7Cisg
ICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVQ
dHItPmlkKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jl
UHRyLT5pZCgpLCBvYmplY3RTdG9yZVB0cik7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVy
c2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXgg
MTFhNjlkMGJmZGE2NmIwNjIwMWQzOTYzYzBlZTE0NGFiODhlMzVlOC4uZjVjZTgxZDZjYjQxNWUz
OWUyMWE0NTVhMjIwMjI5MTE0NGJmM2UxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNjIsMTIg
KzYyLDE1IEBAIHB1YmxpYzoKICAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKICAg
ICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmpl
Y3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGRlbGV0ZU9iamVjdFN0b3JlKGdldE9iamVjdFN0b3Jl
SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9i
amVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25lZCBzaG9ydCk7CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKIAotICAg
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOworICAgIGludDY0X3QgZ2V0T2JqZWN0U3RvcmVJZChj
b25zdCBTdHJpbmcmIG5hbWUpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CkBAIC0xMDAsNyArMTAzLDcgQEAg
cHJpdmF0ZToKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNl
IHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0
J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgogICAgIFJlZlB0cjxJREJG
YWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+IE9iamVjdFN0b3JlTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gPiBPYmplY3RTdG9yZU1hcDsKICAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3Jl
czsKIAogICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDRjZDA4NDViNDM2
YjI3NDg3YjFkYzE1N2ExODgxN2QxZmJlMTdjNDkuLjBjNTNjZDdjZjE1ODkxYzA1MTdmZDkzMjQz
OWNlMWI3YTE5MTk3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCkBAIC01Niw4ICs1
NiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9N
U3RyaW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4IDg1MzU3NTdmMjA2NTUx
NzAxNWI4MTA0MWZlMTJjNmEwNjU5NGQ2YjEuLmU3ODkxM2JhMDRjYmJjNzMzMjI4M2YwNWY0YmFh
YTUwMDBiM2UwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnkuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDQyMTkxNTc5
MjU5MzY3MjkxNmJmNzk5MDU1ODg1NTM5ZDhlMjZmNmMuLmQwZTc0ZDU3NDFmNjI1N2Y4MDRlNzk4
NWNlZTZhMzMyMzQ4N2QzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5LmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZm5kZWYgSURCRmFjdG9yeV9oCiAj
ZGVmaW5lIElEQkZhY3RvcnlfaAogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1
ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCT3BlbkRCUmVx
dWVzdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAppbmRleCBlMTBjMzZkMjJiOTViOGI4NDkwOTE2MjNk
OGRlMjNmOWE4NzUxZTVkLi4zZTA0ZWUxZDRjNWFjZGU1MzI2NTI5NWViZmU1OGI4MTNhN2JhMTM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKQEAgLTU3
LDYgKzU3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQogICAgIGJvb2wgdW5pcXVlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRhZGF0YS51bmlxdWU7IH0KICAgICBib29sIG11bHRpRW50cnkoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0KKyAgICBpbnQ2NF90IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQogCiAgICAgLy8gRklYTUU6IFRyeSB0byBtb2Rp
ZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCiAgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19j
YXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQpAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlS
YW5nZSo+KDApLCBlYyk7IH0gCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4o
MCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwg
a2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwg
ZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMDc2
MWYwNjgxYmJjOWRiMDZkNTc3OTlmNzAzOWVkN2ExNjg0ZGY4NS4uYzkyZmM4ZDQ5NTJmYzRiOGZh
ODIyOGE0ZWY4OGJiYzU4Y2VmZmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI4LDcg
KzI4LDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCA2MzUxZTZmYjhlNzcwMDI2MmY2ZGMzNWRm
MDMxMjA5ODEzYjIwOWQwLi5iYWM4Y2VhMDY1ZmM4MGQ3N2ViMjVhYTJhYmVjYWMyMTM2MDk0OGJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNw
cApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNp
bmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNp
bmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCmluZGV4IDc2
OGViYmFmNGE2MzYxOTliOWRhMDAyNjdlMmMwZDQ3NmRjOWI4MGEuLjFiMDM4NGJkOTU2OTFlNGNm
YTc3MWM0MTkyODU3MmM5YzJiMTYwNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCTWV0YWRhdGEuaApAQCAtMzgsMzcgKzM4LDIxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7Ci1zdHJ1Y3QgSURCSW5k
ZXhNZXRhZGF0YTsKLQotc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgewotICAgIC8vIEZJWE1F
OiBUaGVzZSBjYW4gcHJvYmFibHkgYmUgY29sbGFwc2VkIGludG8gMC4KLSAgICBlbnVtIHsKLSAg
ICAgICAgTm9JbnRWZXJzaW9uID0gLTEsCi0gICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAot
ICAgIH07Ci0KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhKCkKLSAgICAgICAgOiBpbnRWZXJzaW9u
KE5vSW50VmVyc2lvbikKLSAgICB7Ci0gICAgfQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkKQorc3RydWN0IElEQkluZGV4
TWV0YWRhdGEgeworICAgIElEQkluZGV4TWV0YWRhdGEoKSB7IH0KKyAgICBJREJJbmRleE1ldGFk
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCBpZCwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKICAgICAgICAgOiBuYW1lKG5hbWUp
CiAgICAgICAgICwgaWQoaWQpCi0gICAgICAgICwgdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAs
IGludFZlcnNpb24oaW50VmVyc2lvbikKLSAgICAgICAgLCBtYXhPYmplY3RTdG9yZUlkKG1heE9i
amVjdFN0b3JlSWQpCi0gICAgewotICAgIH0KLQorICAgICAgICAsIGtleVBhdGgoa2V5UGF0aCkK
KyAgICAgICAgLCB1bmlxdWUodW5pcXVlKQorICAgICAgICAsIG11bHRpRW50cnkobXVsdGlFbnRy
eSkgeyB9CiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaW50NjRfdCBpZDsKLSAgICBTdHJpbmcgdmVy
c2lvbjsKLSAgICBpbnQ2NF90IGludFZlcnNpb247Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9y
ZUlkOworICAgIElEQktleVBhdGgga2V5UGF0aDsKKyAgICBib29sIHVuaXF1ZTsKKyAgICBib29s
IG11bHRpRW50cnk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhPiBPYmplY3RTdG9yZU1hcDsKLSAgICBPYmplY3RTdG9yZU1hcCBvYmplY3RTdG9y
ZXM7CisgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiB9OwogCiBzdHJ1
Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CkBAIC04NywyMyArNzEsNjYgQEAgc3RydWN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgewogICAgIGJvb2wgYXV0b0luY3JlbWVudDsKICAgICBpbnQ2
NF90IG1heEluZGV4SWQ7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJJbmRleE1l
dGFkYXRhPiBJbmRleE1hcDsKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAt
MTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJJbmRleE1ldGFkYXRhPiBJbmRl
eE1hcDsKICAgICBJbmRleE1hcCBpbmRleGVzOworCisgICAgYm9vbCBjb250YWluc0luZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoSW5kZXhNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBpbmRleGVzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogfTsKIAotc3RydWN0IElEQkluZGV4TWV0YWRhdGEgewotICAgIElEQkluZGV4TWV0YWRh
dGEoKSB7IH0KLSAgICBJREJJbmRleE1ldGFkYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRf
dCBpZCwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlF
bnRyeSkKK3N0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhIHsKKyAgICAvLyBGSVhNRTogVGhlc2Ug
Y2FuIHByb2JhYmx5IGJlIGNvbGxhcHNlZCBpbnRvIDAuCisgICAgZW51bSB7CisgICAgICAgIE5v
SW50VmVyc2lvbiA9IC0xLAorICAgICAgICBEZWZhdWx0SW50VmVyc2lvbiA9IDAKKyAgICB9Owor
CisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IE9i
amVjdFN0b3JlTWFwOworCisgICAgSURCRGF0YWJhc2VNZXRhZGF0YSgpCisgICAgICAgIDogaW50
VmVyc2lvbihOb0ludFZlcnNpb24pCisgICAgeworICAgIH0KKyAgICBJREJEYXRhYmFzZU1ldGFk
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCkKICAgICAgICAg
OiBuYW1lKG5hbWUpCiAgICAgICAgICwgaWQoaWQpCi0gICAgICAgICwga2V5UGF0aChrZXlQYXRo
KQotICAgICAgICAsIHVuaXF1ZSh1bmlxdWUpCi0gICAgICAgICwgbXVsdGlFbnRyeShtdWx0aUVu
dHJ5KSB7IH0KKyAgICAgICAgLCB2ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgaW50VmVyc2lv
bihpbnRWZXJzaW9uKQorICAgICAgICAsIG1heE9iamVjdFN0b3JlSWQobWF4T2JqZWN0U3RvcmVJ
ZCkKKyAgICB7CisgICAgfQorCisgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmVz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+a2V5ICE9IElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkludmFsaWRJZDsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRPYmplY3RTdG9y
ZShuYW1lKSAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7CisgICAgfQorCiAg
ICAgU3RyaW5nIG5hbWU7CiAgICAgaW50NjRfdCBpZDsKLSAgICBJREJLZXlQYXRoIGtleVBhdGg7
Ci0gICAgYm9vbCB1bmlxdWU7Ci0gICAgYm9vbCBtdWx0aUVudHJ5OworICAgIFN0cmluZyB2ZXJz
aW9uOworICAgIGludDY0X3QgaW50VmVyc2lvbjsKKyAgICBpbnQ2NF90IG1heE9iamVjdFN0b3Jl
SWQ7CisKKyAgICBPYmplY3RTdG9yZU1hcCBvYmplY3RTdG9yZXM7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5k
ZXggZmM2NTczYTE4YTI4NmVjMGE2MjVjZjZhNTVkZjY1MmUxYWQ3YWJhMy4uZDlkMmVjMjgwNDk1
OTRlMjcwODhkMWZmY2ZkMjMyMTY5NzY1MTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNjYsNyArNjYsNyBAQCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29u
c3QKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIik7CiAgICAgUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
ICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4
ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsKICAgICBpbmRleE5hbWVz
LT5zb3J0KCk7CiAgICAgcmV0dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMjA5LDcg
KzIwOSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgZm9yIChJREJPYmplY3RTdG9y
ZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4
ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAg
ICAgIEluZGV4S2V5cyBrZXlzOwogICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0
LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsKLSAgICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPmtl
eSk7CisgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsKICAgICAgICAg
aW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXpl
KCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtMzgyLDcgKzM4Miw3IEBAIFBhc3NSZWZQdHI8
SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0CiAgICAgICAgIGVjID0gTkFUSVZFX1RZUEVfRVJSOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgaWYgKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSkg
eworICAgIGlmIChtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KQEAgLTQwOSw3ICs0MDksNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAg
IElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVl
LCBtdWx0aUVudHJ5KTsKICAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShtZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlv
bi5nZXQoKSk7CiAgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwotICAgIG1fbWV0YWRh
dGEuaW5kZXhlcy5zZXQobmFtZSwgbWV0YWRhdGEpOworICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5z
ZXQoaW5kZXhJZCwgbWV0YWRhdGEpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVjKQpA
QCAtNDQ0LDE1ICs0NDQsMjQgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKICAgICBpZiAoaXQg
IT0gbV9pbmRleE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAotICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+
aW5kZXgobmFtZSwgZWMpOwotICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElm
IHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRp
b24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCi0gICAgaWYgKGVjKQorICAgIGlmICghbV9tZXRhZGF0
YS5jb250YWluc0luZGV4KG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1f
bWV0YWRhdGEuaW5kZXhlcy5maW5kKG5hbWUpOwotICAgIEFTU0VSVChtZGl0ICE9IG1fbWV0YWRh
dGEuaW5kZXhlcy5lbmQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
aW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CisgICAgQVNTRVJUKCFl
YyAmJiBpbmRleEJhY2tlbmQpOwogCi0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQklu
ZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4TWV0
YWRhdGEoMCk7CisgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9
PSBuYW1lKSB7CisgICAgICAgICAgICBpbmRleE1ldGFkYXRhID0gJml0LT52YWx1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbmRleE1ldGFkYXRh
KTsKKworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKCppbmRl
eE1ldGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKIH0KQEAgLTQ2NywyMSArNDc2LDIwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6
OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIW1fbWV0YWRhdGEuaW5kZXhlcy5jb250
YWlucyhuYW1lKSkgeworICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1l
LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoIWVjKSB7CisgICAgICAg
IEFTU0VSVChtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpOwogICAgICAgICBJREJJbmRl
eE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChp
dCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CisgICAgICAgICAgICBtX21ldGFkYXRhLmluZGV4ZXMu
cmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CiAgICAgICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxl
dGVkKCk7CiAgICAgICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkpOwotICAg
ICAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKG5hbWUpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyM2EzMzY3ZjRjM2I1NjM4MzZlNTVhYzQ5OGQ3NTc2
MWQyMDEwNDQ2Li45NzZhZDBiZGI3Yjk3YjhiZGFiNzIyMmU5OTA2OTVkZWNjYmE1YTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKQEAg
LTEwNyw3ICsxMDYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEp
KTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlz
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMiKTsKIApAQCAtMTE4LDE2ICsxMTcs
MjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHUKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJU
cmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG5l
d0luZGV4TmFtZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oaW5kZXhOYW1lcykpOwor
ICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBuZXdJbmRleElkcyA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8aW50NjRfdD4oaW5kZXhJZHMpKTsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4g
PiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlz
KSk7CiAKICAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8IGtleSk7CiAKICAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1lcy5y
ZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKKyAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG5ld0luZGV4
SWRzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQogICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJREJfQUJPUlRfRVJSKSk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmKQoreworICAg
IHJldHVybiBwdXQocHJwVmFsdWUsIHBycEtleSwgcHV0TW9kZSwgcHJwQ2FsbGJhY2tzLCB0cmFu
c2FjdGlvblB0ciwgZ2V0SW5kZXhJZHMoaW5kZXhOYW1lcyksIGluZGV4S2V5cyk7Cit9CiBuYW1l
c3BhY2UgewogY2xhc3MgSW5kZXhXcml0ZXIgewogcHVibGljOgpAQCAtMTU3LDggKzE2MCw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCB3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBjb25zdAorICAgIGJvb2wg
d3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3Jl
LCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0CiAgICAgeworICAgICAgICBpbnQ2
NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY4LDggKzE3Miw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4TWV0YWRhdGEubmFtZTsgfQotCiBwcml2YXRlOgogCiAgICAgYm9v
bCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKQEAgLTE5MywxMyArMTk1LDEzIEBA
IHByaXZhdGU6CiB9OwogfQogCi1zdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwg
Ym9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMsIGNv
bnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJp
bmcqIGVycm9yTWVzc2FnZSkKK3N0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBi
b29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmlu
ZyogZXJyb3JNZXNzYWdlKQogewotICAgIEFTU0VSVChpbmRleE5hbWVzLnNpemUoKSA9PSBpbmRl
eEtleXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhJZHMuc2l6ZSgpID09IGluZGV4S2V5cy5z
aXplKCkpOwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleU1hcDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZGV4TmFtZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGluZGV4S2V5TWFwLmFkZChpbmRleE5h
bWVzW2ldLCBpbmRleEtleXNbaV0pOworICAgIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGluZGV4S2V5TWFw
LmFkZChpbmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKIAogICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPml0ZXJJ
bmRleGVzQmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPml0ZXJJbmRleGVzRW5kKCk7ICsraXQp
IHsKIApAQCAtMjI4LDcgKzIzMCw3IEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1h
cnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb25QdHIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpz
ZXRJbmRleEtleXMiKTsKICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFy
eUtleTsKQEAgLTI0Myw3ICsyNDUsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogCiAgICAg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMs
IHByaW1hcnlLZXksIGZhbHNlLCBpbmRleE5hbWVzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMs
ICZlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9u
LCB0aGlzLCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3Jp
dGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gZGVhbCB3
aXRoIGVycm9yTWVzc2FnZSBoZXJlLiBtYWtlSW5kZXhXcml0ZXJzIG9ubHkgZmFpbHMgb24gdW5p
cXVlbmVzcyBjb25zdHJhaW50IGVycm9ycy4KICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9F
UlIsICJEdXBsaWNhdGUgaW5kZXgga2V5cyBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjUxLDQ2ICsyNTMsNjggQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlL
ZXksIGMKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIEluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tp
XS5nZXQoKTsKLSAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3Jk
SWRlbnRpZmllci5nZXQoKSwgKmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkLCBtX2luZGV4ZXMu
Z2V0KGluZGV4V3JpdGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CisgICAgICAgIGlmICghaW5k
ZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpiYWNraW5n
U3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQoKSwgbV9tZXRhZGF0YS5pZCkpIHsKICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
bkludGVyZmFjZSkKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlz
KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKK3sKKyAgICBWZWN0b3I8aW50
NjRfdD4gaW5kZXhJZHMgPSBnZXRJbmRleElkcyhpbmRleE5hbWVzKTsKKyAgICByZXR1cm4gc2V0
SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIGluZGV4SWRzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9u
UHRyKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVh
ZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFjZSkKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwogICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAKLSAgICBPd25QdHI8
VmVjdG9yPFN0cmluZz4gPiBuYW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRl
eE5hbWVzKSk7CisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwogICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UpOwogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKAogICAgICAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpQcmVlbXB0aXZlVGFzaywKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwsIG9iamVjdFN0b3Jl
LCBuYW1lcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVy
bmFsLCBvYmplY3RTdG9yZSwgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCB0cmFuc2FjdGlvbikpKQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1l
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFjZSkK
K3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMoaW5kZXhOYW1lcy5zaXplKCkpOworICAg
IC8vIEZJWE1FOiBXZSBtYW51YWxseSBjb252ZXJ0IGVhY2ggbmFtZSB0byBhbiBpbmRleElkLCBl
dmVuIGlmIHRoZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgYmVjYXVzZSB3ZSBoYXZl
IHRvIHJlbW92ZSBleGFjdGx5IHRoYXQgbWFueSBwcmVlbXB0aXZlIGV2ZW50cywgYnV0IHRoaXMg
d2lsbCBnbyBhd2F5IHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDQyNiBsYW5kcy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4TmFtZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaW5kZXhJZHNbaV0gPSBJbnZhbGlkSWQ7CisgICAgICAgIGZv
ciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFt
ZSgpID09IGluZGV4TmFtZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBpbmRleElkc1tpXSA9IGl0
LT5rZXk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHNldEluZGV4ZXNSZWFkeShpbmRleElkcywgdHJhbnNhY3Rpb25J
bnRlcmZhY2UpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4
ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2
NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwiKTsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4g
PiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZGV4TmFtZXMtPnNpemUoKTsgKytpKQorICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBp
bmRleElkcyA9IHBvcEluZGV4SWRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJ
ZHMtPnNpemUoKTsgKytpKQogICAgICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0
aXZlRXZlbnQoKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHBycFRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1l
cywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0
aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2ND4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxW
ZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsIik7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4g
aW5kZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7CisgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IGluZGV4SWRzID0gcG9wSW5kZXhJZHM7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4g
aW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOwotICAgIEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4
S2V5cyAmJiBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOworICAgIEFT
U0VSVChpbmRleElkcyAmJiBpbmRleEtleXMgJiYgaW5kZXhJZHMtPnNpemUoKSA9PSBpbmRleEtl
eXMtPnNpemUoKSk7CiAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUt
PmF1dG9JbmNyZW1lbnQoKTsKICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCkBA
IC0zMTQsNyArMzM4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIFZlY3RvcjxP
d25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2U7Ci0gICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS5n
ZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhLZXlzLCAmaW5k
ZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUuZ2V0KCksIGtleSwga2V5V2FzR2VuZXJhdGVkLCAqaW5k
ZXhJZHMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCBlcnJvck1lc3NhZ2UpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMzMCw3ICszNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgp
OwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPm1fbWV0YWRhdGEuaWQsIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4V3Jp
dGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CisgICAgICAgIGlmICghaW5kZXhXcml0ZXItPndy
aXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICpvYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCkpIHsKIAogICAg
ICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRp
bmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKTsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihlcnJvcik7CkBAIC0zNzMsNyArMzk3LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAK
ICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3IgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2lu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkg
ewotICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQo
KSwgaXQtPnZhbHVlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUlu
ZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5rZXksIHJl
Y29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAKQEAgLTQxMCw3ICs0MzQsNyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdAogCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCBpZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwg
Ym9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFt
X2luZGV4ZXMuY29udGFpbnMobmFtZSksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAlcyIsIG5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pbmRleGVzLmNv
bnRhaW5zKGlkKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICVzIiwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKIAogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4
QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBJREJJbmRleE1ldGFkYXRhKG5h
bWUsIGlkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKICAgICBBU1NFUlQoaW5kZXgt
Pm5hbWUoKSA9PSBuYW1lKTsKQEAgLTQyOCw3ICs0NTIsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgo
aW50NgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBtX2luZGV4ZXMuc2V0KG5hbWUs
IGluZGV4KTsKKyAgICBtX2luZGV4ZXMuc2V0KGlkLCBpbmRleCk7CiAgICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKIH0KIApAQCAtNDQyLDIyICs0NjYsNDIgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXMKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKLVBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmluZGV4KGludDY0X3QgaW5kZXhJZCkKIHsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7Ci0gICAgaWYgKCFpbmRleCkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IGluZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsKKyAgICBBU1NFUlQoaW5kZXgpOwog
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIHJldHVy
biBpbmRleChnZXRJbmRleElkKG5hbWUpKTsKK30KKworaW50NjRfdCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBmb3IgKElu
ZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2lu
ZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgpID09IG5h
bWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1ZlY3RvcjxpbnQ2NF90PiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpnZXRJbmRleElkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMp
CiB7Ci0gICAgQVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhuYW1lKSk7CisgICAgVmVjdG9yPGlu
dDY0X3Q+IHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsg
KytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGdldEluZGV4SWQobmFtZXNbaV0pKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4KGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1faW5kZXhl
cy5jb250YWlucyhpbmRleElkKSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCkBAIC00NjcsNyArNTExLDEy
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX2luZGV4ZXMucmVtb3ZlKG5hbWUpOworICAgIG1faW5kZXhlcy5yZW1vdmUoaW5kZXhJ
ZCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZGVsZXRlSW5kZXgoZ2V0
SW5kZXhJZChuYW1lKSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsKIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpAQCAtNTQxLDIwICs1OTAsMjAgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiAgICAgVmVjdG9yPElE
QkluZGV4TWV0YWRhdGE+IGluZGV4ZXMgPSBiYWNraW5nU3RvcmUoKS0+Z2V0SW5kZXhlcyhkYXRh
YmFzZUlkKCksIG1fbWV0YWRhdGEuaWQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0ubmFt
ZSwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIGluZGV4ZXNb
aV0pKTsKKyAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLmlkLCBJREJJbmRleEJhY2tl
bmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOwogfQogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKLSAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+bmFtZSgpKSk7Ci0g
ICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUoaW5kZXgtPm5hbWUoKSk7CisgICAgQVNT
RVJUKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXgtPmlkKCkpKTsKKyAgICBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+aWQoKSk7CiB9CiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKICAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXhQdHIgPSBpbmRleDsKLSAgICBBU1NFUlQoIW9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXhQdHItPm5hbWUoKSkpOwotICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5uYW1lKCksIGluZGV4UHRyKTsKKyAgICBBU1NF
UlQoIW9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXhQdHItPmlkKCkpKTsKKyAg
ICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+aWQoKSwgaW5kZXhQdHIpOwog
fQogCiBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJh
dGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
QEAgLTU3Myw3ICs2MjIsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0
ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFjawogICAgIGJhY2tpbmdT
dG9yZSgpLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0K
IAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCmluZGV4IDkwOGU3ZjIzOGVmZjAwODRhN2QzNjllMDIyNTQ0MDgzNWZiNjY1Y2EuLmMyZWZk
M2IwZTNhMjFiNjEyNGUwNDljYjAxMjBkN2JmMjRmNjhjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKQEAgLTUzLDggKzUzLDggQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKLSAgICAKKyAgICB0eXBlZGVm
IEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4gSW5kZXhNYXA7
CisKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwogICAgIGludDY0X3Qg
aWQoKSBjb25zdAogICAgIHsKQEAgLTY1LDE0ICs2NSwyMCBAQCBwdWJsaWM6CiAgICAgLy8gSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVm
UHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7
CisKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiAsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IGluZGV4KGludDY0X3QpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCB2b2lk
IG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpOwpAQCAtODYsMTAgKzkyLDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBT
dHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KICAgICBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CiAg
ICAgY29uc3QgYm9vbCYgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEu
YXV0b0luY3JlbWVudDsgfQotICAgIAorCiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgp
OyB9CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+
aWQoKTsgfQotICAgIAorCisgICAgaW50NjRfdCBnZXRJbmRleElkKGNvbnN0IFN0cmluZyYpOwor
ICAgIFZlY3RvcjxpbnQ2NF90PiBnZXRJbmRleElkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwor
CiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKIApAQCAtOTgs
OSArMTA3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNr
Q3VycmVudCk7CiAKICAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5h
bWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOworICAgIHN0YXRpYyB2b2lkIHB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90
PiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CiAgICAg
c3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW5kZXhlc1Jl
YWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhO
YW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGlj
IHZvaWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBjcmVh
dGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBk
ZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYzZlYTEzYzUwMTlkOGNmODMwYmYxZGY5MDYzODgxZjFk
NDhkNjhkZC4uOWFiZTg4M2NiYThlZWNkMTQyYzBjYzljNjgwZTg2OGQ0YWFlYjI3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTYzLDE2ICs2MywyMiBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1Jl
YWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3Bl
bkRCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVu
REJSZXF1ZXN0LmNwcAppbmRleCBlMDcwYjhiZDc2ZGIwOTYyMzhkY2IwYjM1ODVmOGFlZTQ3Nzc0
MWNhLi5iMjM5MDE2MTliY2EzYTEwOWFmYTZkMjVhOGE4ZDdlNWVmNzgyNGNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNw
cApAQCAtODksNyArODksNyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRl
ZChpbnQ2NF90IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCVHJhbnNhYwogICAgIG1fZGF0YWJh
c2VDYWxsYmFja3MtPmNvbm5lY3QoaWRiRGF0YWJhc2UuZ2V0KCkpOwogICAgIG1fZGF0YWJhc2VD
YWxsYmFja3MgPSAwOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlv
bkJhY2tlbmQsIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgaWRiRGF0YWJhc2UuZ2V0
KCksIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQgPSBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb25CYWNr
ZW5kLCBWZWN0b3I8U3RyaW5nPigpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGlk
YkRhdGFiYXNlLmdldCgpLCB0aGlzKTsKICAgICB0cmFuc2FjdGlvbkJhY2tlbmQtPnNldENhbGxi
YWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlvbiA9IGZyb250ZW5kOwogICAg
IG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJhc2UucmVsZWFzZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggMmMy
ZDEyZDNmMzg5ZDNlNWViZmIzM2NhNzM2MWRhOTNiZGUyYzM5ZC4uNzA0NmEyNGRhNDg1YjIxNzRh
NmM2MDA4MzFlMDg1NGFlOTU1Mjg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
cHJwQmFja2VuZAogICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQgPSBJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCwgSURCVHJhbnNhY3Rp
b246OlZFUlNJT05fQ0hBTkdFLCBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS5nZXQoKSk7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBmcm9udGVuZCA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLCBWZWN0b3I8U3RyaW5nPigpLCBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgp
KTsKICAgICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOwogICAgIG1fdHJh
bnNhY3Rpb24gPSBmcm9udGVuZDsKIApAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgSURCUmVxdWVz
dDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiAgICAgaWYgKG1fdHJhbnNh
Y3Rpb24gJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0
RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1l
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJPUlRfRVJSKSkpOwotICAgICAgICBFeGNlcHRp
b25Db2RlIHVudXNlZDsgCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgdW51c2VkOwogICAgICAgICBt
X3RyYW5zYWN0aW9uLT5hYm9ydCh1bnVzZWQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA4ZWMxNWU1
ZWMwNzNkZmZiMWZiMTYxMGVlODY0MDMyMWUwNDlhNDJhLi40NzAwNWMzYjc2MWUyMGMyNWYwODkx
MjFjNDYzN2YzMGJhODczZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC00NCwxNSArNDQsMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6TW9k
ZSBtb2RlLCBJREJEYXRhYmFzZSogZGIpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJU
cmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb246Ok1vZGUgbW9kZSwg
SURCRGF0YWJhc2UqIGRiKQogewogICAgIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3Qg
PSAwOwotICAgIHJldHVybiBjcmVhdGUoY29udGV4dCwgYmFja2VuZCwgbW9kZSwgZGIsIG9wZW5E
QlJlcXVlc3QpOworICAgIHJldHVybiBjcmVhdGUoY29udGV4dCwgYmFja2VuZCwgb2JqZWN0U3Rv
cmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QpOwogfQogCi1QYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJUcmFuc2FjdGlvbjo6TW9kZSBtb2RlLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5E
QlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJU
cmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb246Ok1vZGUgbW9kZSwg
SURCRGF0YWJhc2UqIGRiLCBJREJPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0KQogewotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYobmV3IElEQlRyYW5z
YWN0aW9uKGNvbnRleHQsIGJhY2tlbmQsIG1vZGUsIGRiLCBvcGVuREJSZXF1ZXN0KSkpOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYobmV3IElEQlRyYW5z
YWN0aW9uKGNvbnRleHQsIGJhY2tlbmQsIG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIGRiLCBvcGVu
REJSZXF1ZXN0KSkpOwogICAgIHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICBy
ZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQpAQCAtODgsMTAgKzg4LDExIEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkV3JpdGVMZWdhY3koKQogfQog
CiAKLUlEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCVHJhbnNhY3Rpb246Ok1vZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiLCBJREJPcGVu
REJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0KQorSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0
U3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb246Ok1vZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiLCBJ
REJPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNv
bnRleHQsIHRoaXMpCiAgICAgLCBtX2JhY2tlbmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2Uo
ZGIpCisgICAgLCBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVOYW1lcykKICAgICAsIG1f
b3BlbkRCUmVxdWVzdChvcGVuREJSZXF1ZXN0KQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBt
X2FjdGl2ZSh0cnVlKQpAQCAtMTU1LDE2ICsxNTYsMTkgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXAKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZTsKIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMpOwot
ICAgIEFTU0VSVCghb2JqZWN0U3RvcmVCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYSBzdG9yZSwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQg
dmljZSB2ZXJzYS4KLSAgICBpZiAoZWMpCisgICAgaWYgKCFpc1ZlcnNpb25DaGFuZ2UoKSAmJiAh
bV9vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CisgICAgQVNTRVJU
KCFlYyAmJiBvYmplY3RTdG9yZUJhY2tlbmQpOwogCiAgICAgY29uc3QgSURCRGF0YWJhc2VNZXRh
ZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwotICAgIElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmZpbmQobmFtZSk7Ci0gICAgQVNTRVJUKG1kaXQgIT0gbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmVuZCgpKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtZXRhZGF0YS5m
aW5kT2JqZWN0U3RvcmUobmFtZSk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZCAhPSBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+dmFsdWUsIG9i
amVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChvYmplY3RTdG9yZUlkKSwgb2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKICAgICBvYmplY3RT
dG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5y
ZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaAppbmRleCA4OTkzOWJmODU5NzViMWNiOWY3ZjUwYjUxOTdmOWY2YWMzMWJm
Yzk1Li5jYjhmMGI5YzBiMTRkNjEwZmIyYmRiMzdhM2M4YjYxNjRkOGJlNDViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTMw
LDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRP
TUVycm9yLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAg
LTU2LDggKzU1LDggQEAgcHVibGljOgogICAgICAgICBWRVJTSU9OX0NIQU5HRSA9IDIKICAgICB9
OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+LCBNb2RlLCBJREJEYXRhYmFzZSopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgTW9kZSwgSURCRGF0YWJhc2UqLCBJREJPcGVuREJS
ZXF1ZXN0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgTW9kZSwg
SURCRGF0YWJhc2UqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5hbWVzLCBN
b2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3QqKTsKICAgICB2aXJ0dWFsIH5JREJU
cmFuc2FjdGlvbigpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVJlYWRP
bmx5KCk7CkBAIC0xMjIsNyArMTIxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBJREJUcmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3Qq
KTsKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCopOwogCiAgICAgdm9pZCBlbnF1
ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygp
OwpAQCAtMTQ1LDYgKzE0NCw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBt
X2RhdGFiYXNlOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fb2JqZWN0U3RvcmVOYW1lczsK
ICAgICBJREJPcGVuREJSZXF1ZXN0KiBtX29wZW5EQlJlcXVlc3Q7CiAgICAgY29uc3QgTW9kZSBt
X21vZGU7CiAgICAgYm9vbCBtX2FjdGl2ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5k
ZXggZjE2NjUxOTQ5YmFkM2M1YjE1MWJlYjRmZjc1ZjI1ZDA2YjcxYTI2Ni4uZTE2NTJkNjk1ZGY4
NTM0MWIzNjA4NmQ4Njc5YjEzNzQ0MDJmZjhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAKQEAgLTM5LDEzICszOSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
Y3JlYXRlKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2RlLCBkYXRhYmFzZSkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmpl
Y3RTdG9yZUlkcywgbW9kZSwgZGF0YWJhc2UpKTsKIH0KIAotSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9y
ZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
KQotICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKK0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCogZGF0YWJhc2UpCisgICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRz
KQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAgICAsIG1fZGF0
YWJhc2UoZGF0YWJhc2UpCkBAIC01NSw4ICs1NSw2IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVz
CiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCiAgICAgLCBtX3BlbmRpbmdFdmVu
dHMoMCkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZU5hbWVzKTsKLSAgICBBU1NFUlQobV9t
b2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSB8fCAhbV9vYmplY3RTdG9yZU5h
bWVzLT5pc0VtcHR5KCkpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7CiB9CiAKQEAgLTY2LDMxICs2NCwyMyBAQCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpCiAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
bV9zdGF0ZSA9PSBGaW5pc2hlZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IC8vIERvZXMgYSBsaW5lYXIgc2VhcmNoLCBidXQgaXQgcmVhbGx5IHNob3VsZG4ndCBiZSB0aGF0
IHNsb3cgaW4gcHJhY3RpY2UuCi0gICAgaWYgKG1fbW9kZSAhPSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UgJiYgIW1fb2JqZWN0U3RvcmVOYW1lcy0+Y29udGFpbnMobmFtZSkpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5hbWUpOwotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0IG5vdyBiZWFjdXNlIGEgc2V0VmVy
c2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdzCi0gICAgLy8gICAgICAgIGJldHdl
ZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNrIG9jY3VycykgYW5kIHRoZSAub2Jq
ZWN0U3RvcmUgY2FsbC4KLSAgICAvLyAgICAgICAgVGhlcmUncyBhIGJ1ZyB0byBtYWtlIHRoaXMg
aW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtlIGl0IGltcG9zc2libGUgaGVyZSwg
d2UKLSAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgotICAgIGlmICghb2JqZWN0
U3RvcmUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VO
RF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlLT5vYmplY3RTdG9yZShpZCk7
CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFz
ZSgpOwogfQogCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gb2JqZWN0U3RvcmUobV9kYXRhYmFzZS0+
Z2V0T2JqZWN0U3RvcmVJZChuYW1lKSwgZWMpOworfQorCiBib29sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnNjaGVkdWxlVGFzayhUYXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gYWJvcnRUYXNrKQogewogICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQpA
QCAtMTAwLDcgKzkwLDcgQEAgYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVs
ZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxTY3JpcHRFeGUKICAgICAgICAgbV90YXNr
UXVldWUuYXBwZW5kKHRhc2spOwogICAgIGVsc2UKICAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1
ZXVlLmFwcGVuZCh0YXNrKTsKLSAgICAKKwogICAgIGlmIChhYm9ydFRhc2spCiAgICAgICAgIG1f
YWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmgKaW5kZXggMzRhOTc1NzBmMDBmYjdhMDg0YjhkZDM4OTM0N2EyNTRhMjUzNDg2Mi4uNGU0ZGRl
Y2MxMTIzNjk2Y2E0NjU3NTNkYjVmMTI5MmJjM2NlMzY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
LSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgi
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oIgpAQCAtNDUsNyArNDQsNyBAQCBjbGFzcyBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKERPTVN0cmluZ0xpc3QqIG9i
amVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCop
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0
ZShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKik7CiAgICAgc3RhdGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIGZy
b20oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBpbnRlcmZhY2UpCiAgICAgewogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+KGludGVy
ZmFjZSk7CkBAIC01NCw2ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyog
Y2FsbGJhY2tzKSB7IG1fY2FsbGJhY2tzID0gY2FsbGJhY2tzOyB9CkBAIC03MSw3ICs3MSw3IEBA
IHB1YmxpYzoKICAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAogcHJpdmF0ZToK
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3Jl
cywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9y
ZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAg
ICAgZW51bSBTdGF0ZSB7CiAgICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tz
IHlldC4KQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRhc2tFdmVudFRpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsKICAgICB2b2lkIGNsb3Nl
T3BlbkN1cnNvcnMoKTsKIAotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3Jl
TmFtZXM7CisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1fb2JqZWN0U3RvcmVJZHM7CiAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggZjcwN2YzNGEwOTk4NTRmNDM5MjE4MjM5
NGEyZjFlNzI1Y2UwNTc0Yy4uZDExZTE4MTFjZTQzNWJmNjdmMDgzM2QzZTU1ODA2Yjg4N2NlNGUz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU0LDYgKzU0LDcgQEAg
cHVibGljOgogICAgIH07CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBjb21taXQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oCmluZGV4IGE3NWI3YmUxNDJiOTY1YTE1ZDYwNjAzNmZjZmFkMjhhMDky
YzlhZWYuLmU3YjlmY2FmYmJjYzA3ZDQ2NGU2ZDdjZGM3MzlmZTcxNmNkNTIyYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJEYXRhYmFzZS5oCmluZGV4IGE0OTMyZWUyODI0MDA2MmQxNTdmY2QwMmE1OWE3
YjJmMzcwZTE3MmIuLmYwMmJiZjQ0YzQ0N2Q1NzA4YWY5ZDQzN2VhY2Y5NWY4ZDQ4MDZlZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaApAQCAt
NTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcm
IHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJikg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICAvLyBUcmFuc2ZlcnMgb3duZXJz
aGlwIG9mIHRoZSBXZWJJREJUcmFuc2FjdGlvbiB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwg
V2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmIG5h
bWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKQEAgLTYzLDYg
KzY0LDExIEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24oY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCB1bnNpZ25lZCBzaG9ydCBt
b2RlKQorICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VDbG9zZSgpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oCmluZGV4IGNhMDEwM2NkYTZmYzNmMzcyY2Fk
Y2FhYjdjZDZjZTMwNWEyMjdkMmUuLjhlYThkYjg2NmY4NDA3NzI4MGNkNDM1OWM3MjhmYTdkMjgz
NjIwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9i
amVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2Jq
ZWN0U3RvcmUuaApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBXZWJWZWN0
b3I8V2ViSURCS2V5PiBXZWJJbmRleEtleXM7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aElu
ZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkm
LCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2Vi
SW5kZXhLZXlzPiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgaW5kZXhJZHMs
IGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5
UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4
Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBjbGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYs
IFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAg
IHZpcnR1YWwgV2ViSURCSW5kZXgqIGNyZWF0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0
IFdlYklEQktleVBhdGgmLCBib29sLCBib29sLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdl
YkV4Y2VwdGlvbkNvZGUmKQpAQCAtNjksMTQgKzcwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURC
S2V5JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5k
ZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktl
eSYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4
S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH07CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25z
dCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH07CiAgICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBv
ZiB0aGUgV2ViSURCSW5kZXggdG8gdGhlIGNhbGxlci4KICAgICB2aXJ0dWFsIFdlYklEQkluZGV4
KiBpbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKQogICAgIHsK
ICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CisgICAgdmlydHVhbCBXZWJJREJJbmRleCogaW5kZXgoY29uc3QgbG9uZyBsb25nKQor
ICAgIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgobG9uZyBsb25nIGluZGV4SWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYklEQlRyYW5zYWN0aW9uOjpUYXNr
VHlwZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY291bnQoY29uc3Qg
V2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2Fj
dGlvbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24u
aAppbmRleCA4MTZhMzI4MTQ3MGI3MjkyZjQzZDQ0ZDIzMmYzMDNjNGZiYjVkODQ2Li5iYWMyZGE4
OGQwM2E0MDlhOTdlMTk0ODM3ZWY0ZDBiYjc3ZmE0YjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKQEAgLTUxLDYgKzUxLDExIEBA
IHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CisgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUobG9uZyBsb25nLCBXZWJFeGNlcHRpb25Db2RlJikKKyAgICB7CisgICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHZpcnR1
YWwgdm9pZCBjb21taXQoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBhYm9ydCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJE
YXRhYmFzZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJE
YXRhYmFzZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggMjliOGM0YmY0MWRjYWFmYTYxOWViNmEwZDFh
MTUxMTE0YzI5MWU1My4uZjZkOTY0NDcwZWZiNDE1MTQ0ZmRjMWQwNDA4MjkwOWNkY2Q4ZTUwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFj
a2VuZFByb3h5LmNwcApAQCAtODUsNiArODUsMTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQ
cm94eTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGkK
ICAgICBtX3dlYklEQkRhdGFiYXNlLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCAqdHJhbnNhY3Rp
b25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwogfQogCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQg
dG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisg
ICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2Jq
ZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9
IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwor
ICAgIG1fd2ViSURCRGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsICp0
cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7Cit9CisKIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgQVNTRVJUKG1fd2ViSURCRGF0YWJhc2UpOwpAQCAtMTAyLDYgKzExMCwxNSBAQCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHk6OnRyYW5zYWN0aW9uKAogICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6
Y3JlYXRlKHRyYW5zYWN0aW9uLnJlbGVhc2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJhbnNhY3Rp
b24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQg
bW9kZSkKK3sKKyAgICBPd25QdHI8V2ViSURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gYWRv
cHRQdHIobV93ZWJJREJEYXRhYmFzZS0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIG1vZGUp
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKHRyYW5zYWN0aW9uLnJlbGVhc2Uo
KSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OmNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KQogewogICAgIG1fd2ViSURCRGF0YWJhc2UtPmNsb3NlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuaAppbmRleCBmYzgzMWU4ZGVjNDlhNzllNjFjYTdjYmNlZjViNDY3ZDFjNGJkNWZkLi45
MTZmODMzYWI3ZWZiZmNkNDA2NjFlZGE3N2ZhOWFjOTUzOGRjNDY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKQEAgLTQ2
LDggKzQ2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgYXV0
b0luY3JlbWVudCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJz
aW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKFdlYkNvcmU6OkRPTVN0cmluZ0xp
c3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmlu
ZGV4IDJiOWI0NGE3YTFmZmNkZDgwMjA3NWVhMGQzOGU2YjdjMDcxNzQ4YTUuLjZhMGQwMjc3MmI4
NDRjN2VmNmFjMjBmYmNlYzNjYzMxZDFmMzYxNDIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTc3
LDYgKzc3LDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJbmRl
eEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsCiAgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmpl
Y3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCB3ZWJJbmRl
eE5hbWVzLCB3ZWJJbmRleEtleXMsIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1
YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVu
ZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUg
cHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rp
b25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNh
Y3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNf
Y2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxs
YmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2Fj
dGlvbigpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eTo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
bikKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJl
IGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtODcs
NiArOTUsMTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhLZXlz
KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LAogICAgIG1fd2ViSURCT2JqZWN0U3Rv
cmUtPnNldEluZGV4S2V5cyhwcnBQcmltYXJ5S2V5LCB3ZWJJbmRleE5hbWVzLCB3ZWJJbmRleEtl
eXMsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcnBQcmlt
YXJ5S2V5LCBXZWJWZWN0b3I8bG9uZyBsb25nPihpbmRleElkcyksIGluZGV4S2V5cywgKnRyYW5z
YWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOworfQorCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTEzMCw3ICsx
NDYsMTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWUKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24g
cG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBh
cywgaW4gdGhlIHJlbmRlcmVyLAogICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGlu
dGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleGVz
UmVhZHkoaW5kZXhOYW1lcywgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9u
KCkpOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8
V2ViU3RyaW5nPihpbmRleE5hbWVzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCkpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24g
cG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBh
cywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGlu
dGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleGVz
UmVhZHkoV2ViVmVjdG9yPGxvbmcgbG9uZz4oaW5kZXhJZHMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+
Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE0MSw2ICsxNjUsMTQgQEAgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpp
bmRleChjb25zdCBTdHIKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShp
bmRleC5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGludDY0X3QgaW5kZXhJZCkKK3sK
KyAgICBPd25QdHI8V2ViSURCSW5kZXg+IGluZGV4ID0gYWRvcHRQdHIobV93ZWJJREJPYmplY3RT
dG9yZS0+aW5kZXgoaW5kZXhJZCkpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVhc2Uo
KSk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGlu
IHRoZSByZW5kZXJlciwKQEAgLTE0OSw2ICsxODEsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlv
bkIKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCAqdHJhbnNhY3Rp
b25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwogfQogCit2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBpbnQ2NF90IGluZGV4SWQsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8g
YmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAg
Ly8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0
cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0
YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAg
IG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KGluZGV4SWQsICp0cmFuc2FjdGlvblBy
b3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7Cit9CiB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZFByb3h5OjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHkuaAppbmRleCA4NDcwYzFhZDkwNWJjMTU2ZmQ5ZjNiOGZjMTRlZmYxZTQxMWU4
YmViLi43OTExM2FlOTU2NWEzMTRkY2NmMmJhYzc4MGViYTc1Mzk0ZjZjZGFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmgKQEAgLTQ1LDE2ICs0NSwyMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
KFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5
cyhQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8aW50NjRf
dD4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+Jik7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAKICAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgo
aW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRo
JiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9v
bCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0
IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lk
IHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgV1RGOjpWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOworCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleChpbnQ2NF90KTsKICAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJL
ZXlSYW5nZT4sIFdlYkNvcmU6OklEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZTo6VGFza1R5cGUsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
VHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCmluZGV4IDg4Zjk4NTJhY2VmNGM2ZTg5YTU4
OWU0NTI1OWUyMmIxZjM4NmIxZTUuLmYwODM3ZmVmNmE0NmUxZjNjNGZkYjI5OTkxNDBlM2VjN2Fi
YTJlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHAKQEAgLTYyLDYgKzYyLDE0IEBAIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eTo6b2JqZWN0U3RvCiAgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpjcmVh
dGUob2JqZWN0U3RvcmUucmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Ojpv
YmplY3RTdG9yZShpbnQ2NF90IGluZGV4SWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIE93
blB0cjxXZWJJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBhZG9wdFB0cihtX3dlYklEQlRy
YW5zYWN0aW9uLT5vYmplY3RTdG9yZShpbmRleElkLCBlYykpOworICAgIGlmICghb2JqZWN0U3Rv
cmUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBJREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eTo6Y3JlYXRlKG9iamVjdFN0b3JlLnJlbGVhc2UoKSk7Cit9CisKIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHk6OmNvbW1pdCgpCiB7CiAgICAgbV93ZWJJREJUcmFuc2FjdGlvbi0+
Y29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJh
bnNhY3Rpb25CYWNrZW5kUHJveHkuaAppbmRleCA3ZTc0ODZiZDdjMzIwNjZjYzAyZDY3NjFjODA5
N2M5YmNkZjUzM2U1Li5lOGYyYzMzNzU0ODM0ZGViZTQ0Njk0ZGUwNGZiMDFjZDllZTQxODYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmgKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KCk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9y
ZShpbnQ2NF90LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVRhc2tFdmVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAKaW5kZXggZTA5YzFhM2ZlZDI0N2QyZjU1YmU3Yjk3MjVk
NWEzOTI1M2I2OTY2Ni4uOGQxMmNmYTNlYTliYWUzMmQ0N2MzMzRmYzBlMDE3ZDA5MGRkYTdhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1w
bC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgog
I2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZFByb3h5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJEYXRhYmFzZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RGF0YWJhc2VJbXBsLmNwcAppbmRleCBlNzEwMjlkZWIzNDg0NzE1YjEzMGQzYTFiOGZjZDNmNjA4
Y2IwNmNiLi45MGMyNjIzODk0OWU0NGEwNzQyOTk1NGNmN2Q4OWUxNTY1MGUxYWEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKQEAg
LTc1LDYgKzc1LDExIEBAIHZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyCiAgICAgbV9kYXRhYmFzZUJh
Y2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CiB9CiAKK3ZvaWQgV2ViSURCRGF0YWJhc2VJbXBs
OjpkZWxldGVPYmplY3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBt
X2RhdGFiYXNlQmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgdHJhbnNh
Y3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKK30KKwogdm9p
ZCBXZWJJREJEYXRhYmFzZUltcGw6OnNldFZlcnNpb24oY29uc3QgV2ViU3RyaW5nJiB2ZXJzaW9u
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldFZlcnNpb24odmVyc2lvbiwgSURCQ2FsbGJhY2tzUHJv
eHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgbV9kYXRhYmFzZUNhbGxiYWNrcywgZWMp
OwpAQCAtOTEsNiArOTYsMTcgQEAgV2ViSURCVHJhbnNhY3Rpb24qIFdlYklEQkRhdGFiYXNlSW1w
bDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYgbmFtZXMKICAgICByZXR1cm4g
bmV3IFdlYklEQlRyYW5zYWN0aW9uSW1wbCh0cmFuc2FjdGlvbik7CiB9CiAKK1dlYklEQlRyYW5z
YWN0aW9uKiBXZWJJREJEYXRhYmFzZUltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rvcjxs
b25nIGxvbmc+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKyAgICBW
ZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZExpc3Qob2JqZWN0U3RvcmVJZHMuc2l6ZSgpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUoKTsgKytpKQor
ICAgICAgICBvYmplY3RTdG9yZUlkTGlzdFtpXSA9IG9iamVjdFN0b3JlSWRzW2ldOworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV9kYXRh
YmFzZUJhY2tlbmQtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRMaXN0LCBtb2RlKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IFdlYklE
QlRyYW5zYWN0aW9uSW1wbCh0cmFuc2FjdGlvbik7Cit9CisKIHZvaWQgV2ViSURCRGF0YWJhc2VJ
bXBsOjpjbG9zZSgpCiB7CiAgICAgLy8gVXNlIHRoZSBjYWxsYmFja3MgcGFzc2VkIGluIHRvIHRo
ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IHRoZSBiYWNrZW5kIGluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oCmluZGV4IDc2OWJkZjVkMDVmMGIzYmIx
ZThiNjVmNGUwOWZjMzI3NWViY2E4NjAuLjY1YTE5NjY4YTliNzI5Nzc0Nzc5YjZiZTc0MTZiN2I3
NDhmMjgxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFi
YXNlSW1wbC5oCkBAIC01NCw4ICs1NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYklE
Qk9iamVjdFN0b3JlKiBjcmVhdGVPYmplY3RTdG9yZShsb25nIGxvbmcsIGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25z
dCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJE
T01TdHJpbmdMaXN0JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdl
YlZlY3Rvcjxsb25nIGxvbmc+JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSk7CiAgICAgdmly
dHVhbCB2b2lkIGZvcmNlQ2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCmluZGV4IGRkMWMy
YzhlNTQwZmZlYmIzODhhZDJjYzEzNmI4Y2ViZmYwOWRjYjcuLjJjYTViZjdjN2Q2YjI5YzJlMmEw
NmZiZWZjNjg2YzUyZWE4YzZjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQk1ldGFkYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklE
Qk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQog
ICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIHN0b3JlSXRlcmF0b3IgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgc3RvcmVJ
dGVyYXRvciAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsrc3RvcmVJdGVyYXRvcikg
ewogICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0
b3JlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBPYmplY3RTdG9yZSB3ZWJPYmplY3RTdG9yZTsK
KyAgICAgICAgd2ViT2JqZWN0U3RvcmUuaWQgPSBvYmplY3RTdG9yZS5pZDsKICAgICAgICAgd2Vi
T2JqZWN0U3RvcmUubmFtZSA9IG9iamVjdFN0b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0
b3JlLmtleVBhdGggPSBvYmplY3RTdG9yZS5rZXlQYXRoOwogICAgICAgICB3ZWJPYmplY3RTdG9y
ZS5hdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudDsKQEAgLTU5LDYgKzYw
LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRh
dGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9yID0gb2JqZWN0U3Rv
cmUuaW5kZXhlcy5iZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0b3JlLmluZGV4ZXMu
ZW5kKCk7ICsraW5kZXhJdGVyYXRvcikgewogICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIEluZGV4IHdl
YkluZGV4OworICAgICAgICAgICAgd2ViSW5kZXguaWQgPSBpbmRleC5pZDsKICAgICAgICAgICAg
IHdlYkluZGV4Lm5hbWUgPSBpbmRleC5uYW1lOwogICAgICAgICAgICAgd2ViSW5kZXgua2V5UGF0
aCA9IGluZGV4LmtleVBhdGg7CiAgICAgICAgICAgICB3ZWJJbmRleC51bmlxdWUgPSBpbmRleC51
bmlxdWU7CkBAIC03OSw5ICs4MSw5IEBAIFdlYklEQk1ldGFkYXRhOjpvcGVyYXRvciBJREJEYXRh
YmFzZU1ldGFkYXRhKCkgY29uc3QKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJP
YmplY3RTdG9yZS5pbmRleGVzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICBjb25zdCBJbmRl
eCB3ZWJJbmRleCA9IHdlYk9iamVjdFN0b3JlLmluZGV4ZXNbal07CiAgICAgICAgICAgICBJREJJ
bmRleE1ldGFkYXRhIGluZGV4KHdlYkluZGV4Lm5hbWUsIHdlYkluZGV4LmlkLCB3ZWJJbmRleC5r
ZXlQYXRoLCB3ZWJJbmRleC51bmlxdWUsIHdlYkluZGV4Lm11bHRpRW50cnkpOwotICAgICAgICAg
ICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXgubmFtZSwgaW5kZXgpOworICAgICAgICAg
ICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKICAgICAgICAgfQot
ICAgICAgICBkYi5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLm5hbWUsIG9iamVjdFN0b3Jl
KTsKKyAgICAgICAgZGIub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3Rv
cmUpOwogICAgIH0KICAgICByZXR1cm4gZGI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCBkODE0MDkzZjBmNWIz
NDFlYjJkOTlkOTdjOTE4MjhhYzUwNTIwZDQ1Li44NWJhYzEzYjM0ODAwZDQyMGYxY2QxODc2MGJk
OTU2MzhjZDY0ZTVjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJPYmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTc1LDYgKzc1LDIzIEBAIHZvaWQgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYgdmFsCiAgICAgbV9vYmplY3RTdG9yZS0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZSwga2V5
LCBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1
dE1vZGUpLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0
cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgaW5kZXhOYW1l
cywgaW5kZXhLZXlzLCBlYyk7CiB9CiAKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXQo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4m
IHdlYkluZGV4SWRzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlz
KQoreworICAgIEFTU0VSVCh3ZWJJbmRleElkcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUo
KSk7CisgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKHdlYkluZGV4SWRzLnNpemUoKSk7Cisg
ICAgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRl
eEtleXMod2ViSW5kZXhLZXlzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHdlYkluZGV4SWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5k
ZXhJZHNbaV07CisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3
ZWJJbmRleEtleXNbaV0uc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3
ZWJJbmRleEtleXNbaV0uc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpbmRleEtleUxpc3Rbal0g
PSB3ZWJJbmRleEtleXNbaV1bal07CisgICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlz
dDsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nh
c3Q8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgSURC
Q2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24u
Z2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGluZGV4SWRzLCBpbmRleEtleXMp
OworfQorCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhLZXlzKGNvbnN0IFdl
YklEQktleSYgcHJpbWFyeUtleSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4
TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQod2ViSW5kZXhO
YW1lcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC05MSw2ICsxMDgsMjIgQEAg
dm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkm
IHByaW1hcnlLZXksIGNvbnN0IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMo
cHJpbWFyeUtleSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJ
bXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJW
ZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtl
eXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikK
K3sKKyAgICBBU1NFUlQod2ViSW5kZXhJZHMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkp
OworICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJbmRleElkcy5zaXplKCkpOworICAg
IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhL
ZXlzKHdlYkluZGV4S2V5cy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3
ZWJJbmRleElkcy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4
SWRzW2ldOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2Vi
SW5kZXhLZXlzW2ldLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2Vi
SW5kZXhLZXlzW2ldLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0g
d2ViSW5kZXhLZXlzW2ldW2pdOworICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7
CisgICAgfQorICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRl
eElkcywgaW5kZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UoKSk7Cit9CisKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVh
ZHkoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5h
bWVzKHdlYkluZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTk5LDYgKzEzMiwxNCBAQCB2b2lkIFdlYklE
Qk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiB3ZWJJbmRleAogICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleE5h
bWVzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9
CiAKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgV2Vi
VmVjdG9yPGxvbmcgbG9uZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbikKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhO
YW1lcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5z
aXplKCk7ICsraSkKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOworICAg
IG1fb2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShpbmRleElkcywgdHJhbnNhY3Rpb24uZ2V0
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOworfQorCiB2b2lkIFdlYklEQk9iamVj
dFN0b3JlSW1wbDo6ZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdl
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5k
ZWxldGVGdW5jdGlvbihrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0
cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKCksIGVjKTsKQEAgLTEyNSwxMSArMTY2LDI0IEBAIFdlYklEQkluZGV4KiBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OmluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29k
CiAgICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCitXZWJJREJJbmRl
eCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkK
K3sKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0
U3RvcmUtPmluZGV4KG9iamVjdFN0b3JlSWQpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBuZXcgV2ViSURCSW5kZXhJbXBsKGluZGV4KTsKK30KKwogdm9p
ZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCB0cmFuc2FjdGlv
bi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCit2b2lkIFdl
YklEQk9iamVjdFN0b3JlSW1wbDo6ZGVsZXRlSW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgob2JqZWN0U3RvcmVJZCwgdHJh
bnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKK30KKwog
dm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFu
Z2UmIGtleVJhbmdlLCBXZWJJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUgdGFza1R5cGUs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihrZXlSYW5nZSwgc3RhdGljX2Nh
c3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KGRpcmVjdGlvbiksIElEQkNhbGxiYWNrc1Byb3h5Ojpj
cmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGU+KHRhc2tUeXBlKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKaW5kZXggN2U5ZWQyNTczY2I5NGI4
OTdiY2Y1ODc1YTUyMzIyNzYxYjE0MzA4ZC4uNWRlM2M5YTE1YWQ4ZWY1ZjQ2MGE4ODZhYzFjZGVh
YmNjYmQ1ODJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
T2JqZWN0U3RvcmVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
T2JqZWN0U3RvcmVJbXBsLmgKQEAgLTQ3LDE0ICs0NywxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldChjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcHV0V2l0aEluZGV4
S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQ
dXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0
IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBX
ZWJFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0
IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+Jik7CiAgICAgdm9pZCBzZXRJbmRleEtleXMoY29uc3Qg
V2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0
IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAg
ICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8bG9u
ZyBsb25nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lk
IHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlS
YW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAKICAgICBXZWJJREJJbmRleCog
Y3JlYXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklE
QktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJJREJJbmRleCogaW5kZXgoY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CisgICAgV2ViSURCSW5kZXgq
IGluZGV4KGxvbmcgbG9uZyk7CiAgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgZGVsZXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdl
YkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlS
YW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJJREJU
cmFuc2FjdGlvbjo6VGFza1R5cGUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgY291bnQoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJD
YWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9u
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbklt
cGwuY3BwCmluZGV4IDVjYmJlZTY2MzRhM2JmZjE5NDcwZDZmNzliMGFhZjRhYjg3MDRjMGYuLjY2
MTZkNjcxZmMzMGM5N2U2NzI2MTRjMWE0MTk5ZTNhN2QwODg1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcApAQCAtNTUs
NiArNTUsMTQgQEAgV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6b2Jq
ZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBFeGMKICAgICByZXR1cm4gbmV3IFdlYklE
Qk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7CiB9CiAKK1dlYklEQk9iamVjdFN0b3JlKiBX
ZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUoaW5kZXhJZCwgZWMpOwor
ICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcg
V2ViSURCT2JqZWN0U3RvcmVJbXBsKG9iamVjdFN0b3JlKTsKK30KKwogdm9pZCBXZWJJREJUcmFu
c2FjdGlvbkltcGw6OmNvbW1pdCgpCiB7CiAgICAgbV9iYWNrZW5kLT5jb21taXQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5k
ZXggNjZlMzE1MzAwMGU3M2IwY2ViNzRlODdhMjdmNzg5ZmJiMmRmYTczMy4uMWVlNmFiODAxOTdl
Zjc4ZmFmYTEzZTk2ZmQwNWY3MGYzN2JhZDc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTM5LDkgKzM5LDEwIEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViSURCVHJhbnNhY3Rpb25JbXBsOiBwdWJsaWMgV2Vi
SURCVHJhbnNhY3Rpb24gewogcHVibGljOgogICAgIFdlYklEQlRyYW5zYWN0aW9uSW1wbChXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0g
ICAgdmlydHVhbCB+V2ViSURCVHJhbnNhY3Rpb25JbXBsKCk7ICAKKyAgICB2aXJ0dWFsIH5XZWJJ
REJUcmFuc2FjdGlvbkltcGwoKTsKIAogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9i
amVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElk
LCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZp
cnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJh
c2VCYWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFi
YXNlQmFja2VuZFRlc3QuY3BwCmluZGV4IDg5MzYzZjAwNzc0NGQ0MDYyOGRiNTg2Y2U5N2JjNDc3
MTNmYmVmYWUuLmU5N2JjN2Y2ZGY5YTQxOGNmZjY1NjBkMmMxMjM0ZWJjMWQzYTY4NDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tl
bmRUZXN0LmNwcApAQCAtMTUyLDggKzE1MiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJE
YXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gSURCRGF0YWJhc2VNZXRh
ZGF0YSgpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpIHsgfQogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0
cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUm
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWdu
ZWQgc2hvcnQgbW9kZSkgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171891</attachid>
            <date>2012-11-01 10:39:49 -0700</date>
            <delta_ts>2012-11-01 11:07:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100425-20121101103810.patch</filename>
            <type>text/plain</type>
            <size>113749</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk0MTE5MDA2Y2RhYTc1
OTI1MDNkZWIzZmZmZDQwOTExNGQyY2JhNi4uZDk5MzAwMjQ1OWE3ZWRkNjJlODVkM2JlZTE2NDJm
ODFkMDdmNTU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0xMC0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBh
ZGQgbWV0aG9kcyB0byBzdXBwb3J0IGlkLWJhc2VkIGJhY2tlbmQgQVBJcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBGaXJzdCBoYWxmIG9mIHJlZmFjdG9yIGlu
dm9sdmVzIGFkZGluZyBhIG51bWJlciBvZiBtZXRob2RzIHRoYXQKKyAgICAgICAgYXJlIGludDY0
X3QtYmFzZWQgcmF0aGVyIHRoYW4gU3RyaW5nLWJhc2VkLiBBcyBhIHBhcnQgb2YgdGhpcywgdGhl
CisgICAgICAgIElEQipNZXRhZGF0YSBzdHJ1Y3RzIGFuZCB0aGUgYmFja2VuZCBvYmplY3RTdG9y
ZS9pbmRleCBtYXBzIGFsbAorICAgICAgICB1c2UgaW50NjRfdCBhcyBrZXlzLCByYXRoZXIgdGhh
biBTdHJpbmcuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoZXJlIHdlcmUgYSBudW1iZXIgb2Yg
Y2xlYW51cHMgdGhhdCBjYW1lIG91dCBvZiB0aGUKKyAgICAgICAgcmVmYWN0b3I6CisKKyAgICAg
ICAgLSBUaGUgbGlzdCBvZiBvYmplY3Qgc3RvcmVzIGFjdGl2ZSBpbiBhIHRyYW5zYWN0aW9uIGlz
IG5vdworICAgICAgICAgIG1haW50YWluZWQgYnkgdGhlIGZyb250ZW5kIElEQlRyYW5zYWN0aW9u
IHJhdGhlciB0aGFuIHRoZSBiYWNrZW5kCisgICAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC4gVGhpcyBhbHNvIGhhZCBhIHNpbXBsaWZ5aW5nIHJpcHBsaW5nCisgICAgICAgICAgZWZm
ZWN0IHRocm91Z2ggb3RoZXIgY2FsbCBzaWduYXR1cmVzLgorCisgICAgICAgIC0gSSB3YXMgYWJs
ZSB0byByZW1vdmUgYW4gYXBwYXJlbnRseSBvbGQgRklYTUUgZnJvbQorICAgICAgICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3JlIGFuZCByZXBsYWNlIGl0IHdpdGggYW4g
QVNTRVJULgorCisgICAgICAgIC0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCdzIEluZGV4V3Jp
dGVyIGNsYXNzIGdvdCBhIGxpdHRsZQorICAgICAgICAgIHNpbXBsZXIgc2luY2UgdGhlIGlkIGlz
IG5vdyBlYXNpbHkgYXZhaWxhYmxlIGluIHRoZQorICAgICAgICAgIElEQkluZGV4TWV0YWRhdGEu
CisKKyAgICAgICAgLSBBIG51bWJlciBvZiBtZXRob2RzIGdvdCBzaW1wbGVyIGluIHRoZWlyIGlu
dDY0X3QgdmVyc2lvbnMsCisgICAgICAgICAgc3BlY2lmaWNhbGx5IGRyb3BwaW5nIGEgbnVtYmVy
IG9mIEV4Y2VwdGlvbkNvZGVzLgorCisgICAgICAgIFRoZXJlIGlzIGFsc28gc29tZSBnbHVlIGNv
ZGUKKyAgICAgICAgKGdldEluZGV4SWQvZ2V0SW5kZXhJZHMvZ2V0T2JqZWN0U3RvcmVJZCkgdGhh
dCB3aWxsIGdvIGF3YXkgd2l0aAorICAgICAgICB0aGUgMm5kIGhhbGYgb2YgdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNQorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkgYXMgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3Iu
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpnZXRPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3Jl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmpl
Y3RTdG9yZUZyb21NYXApOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YWRkT2JqZWN0U3RvcmVUb01hcCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleE1ldGFkYXRhOjpJREJJbmRleE1ldGFkYXRhKToKKyAgICAgICAgKElEQklu
ZGV4TWV0YWRhdGEpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpjb250YWluc0luZGV4KToKKyAgICAg
ICAgKElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YTo6SURCRGF0YWJhc2VNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhOjpjb250YWluc09iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6aW5kZXhOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEluZGV4SWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2V0SW5kZXhJZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXApOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9wZW5EQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVz
dDo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmg6CisKIDIwMTItMTEtMDEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWVtb3J5IGluc3RydW1lbnRhdGlvbjogcmVwb3J0
IG1lbW9yeSBvY2N1cGllZCBieSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZCBvZiBpdHMgYmFzZSBS
ZXNvdXJjZVJlcXVlc3RCYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcxZTNmNTU4
NGUwZjQ2ZWE2MTYzNjUzOGU1MzljYWI4YjkyMjdlYzkuLjUzZmM2MmRmYThmM2UyNDBiNmM2Zjdj
MTU5NWVlZGUzMGE1YWRjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTEgQEAKKzIwMTItMTAtMjUgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIEluZGV4ZWREQjogYWRkIG1ldGhvZHMgdG8gc3VwcG9ydCBpZC1iYXNlZCBiYWNr
ZW5kIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDQyNQorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQ2hy
b21pdW0gUHJveHkgYW5kIFdlYklEQiogc3VwcG9ydCBmb3IgbmV3IGludDY0X3QtYmFzZWQgbWV0
aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6cHV0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnNldEluZGV4S2V5cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpzZXRJbmRleGVzUmVhZHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbjo6b2JqZWN0
U3RvcmUpOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OklEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpkZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpJREJEYXRhYmFzZUJhY2tlbmRQ
cm94eTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94
eS5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5OjpwdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyk6CisgICAgICAg
IChXZWJLaXQ6OklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgpOgorICAg
ICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgpOgor
ICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5OjpvYmplY3RTdG9yZSk6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAgICAgICog
c3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6
OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6Om9wZXJh
dG9yIElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFuc2FjdGlv
bkltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYklEQlRyYW5zYWN0
aW9uSW1wbC5oOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwOgor
CiAyMDEyLTExLTAxICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE1lbW9yeSBpbnN0cnVtZW50YXRpb246IHJlcG9ydCBtZW1vcnkgb2NjdXBpZWQgYnkg
UmVzb3VyY2VSZXF1ZXN0IGluc3RlYWQgb2YgaXRzIGJhc2UgUmVzb3VyY2VSZXF1ZXN0QmFzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tz
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAppbmRl
eCBjMzk0MDY4YzUyNzk1MGM3MDAwMDc4YTVjZDQ0NTQzZGQ0MjA5YjllLi5iM2VjNGIyNzBmM2E1
NjhlM2RmOTk3NWJiMjkxODEyNTc5NWVkNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaApAQCAtMjksNyArMjksNiBAQAogI2lmbmRlZiBJ
REJDYWxsYmFja3NfaAogI2RlZmluZSBJREJDYWxsYmFja3NfaAogCi0jaW5jbHVkZSAiRE9NU3Ry
aW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgogI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKQEAgLTY3LDcg
KzY2LDcgQEAgcHVibGljOgogCiAgICAgLy8gRnJvbSBJREJGYWN0b3IuZGVsZXRlRGF0YWJhc2Uo
KSwgSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCksIElEQk9iamVjdFN0b3JlLmRlbGV0ZSgp
LCBJREJPYmplY3RTdG9yZS5jbGVhcigpCiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpID0g
MDsKLSAgICAKKwogICAgIC8vIEZyb20gSURCQ3Vyc29yLmFkdmFuY2UoKS9jb250aW51ZSgpCiAg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pID0g
MDsKICAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDJjOTFk
NzJmN2VkZmMyNmIyYzQyMzM2Yzc1OWQ4ZTRmY2E1OWEwODguLmZjY2I0NTZjNWQ2OGEyMTQ2N2Y1
OGYwOWNkYzYyN2ZjMzBmZDk3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQg
IT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG9iamVjdFN0
b3JlTmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBw
ZW5kKGl0LT52YWx1ZS5uYW1lKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAg
cmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwogfQpAQCAtMTQyLDcgKzE0Miw3IEBA
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0
aChrZXlQYXRoU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICBpZiAobV9tZXRhZGF0YS5jb250YWluc09iamVjdFN0
b3JlKG5hbWUpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJ
TlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNzAsNyArMTcwLDcgQEAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY28KIAogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRh
dGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEs
IG9iamVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQobmFtZSwgbWV0YWRhdGEp
OworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEp
OwogICAgICsrbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkOwogCiAgICAgbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CkBA
IC0xODcsNyArMTg3LDkgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkp
IHsKKworICAgIGludDY0IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLmZpbmRPYmplY3RTdG9y
ZShuYW1lKTsKKyAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbnZhbGlkSWQpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05P
VF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTUsNyArMTk3LDcgQEAg
dm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUs
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoIWVj
KSB7CiAgICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0
ZWQobmFtZSk7Ci0gICAgICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsK
KyAgICAgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwog
ICAgIH0KIH0KIApAQCAtMjQxLDYgKzI0MywxMyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX21ldGFkYXRhLmNvbnRh
aW5zT2JqZWN0U3RvcmUoc3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKKyAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5l
dyB0cmFuc2FjdGlvbiBzeW5jaHJvbm91c2x5LiBMb2NrcyBhcmUgYWNxdWlyZWQgYXN5bmNocm9u
b3VzbHkuIE9wZXJhdGlvbnMKICAgICAvLyBjYW4gYmUgcXVldWVkIGFnYWluc3QgdGhlIHRyYW5z
YWN0aW9uIGF0IGFueSBwb2ludC4gVGhleSB3aWxsIHN0YXJ0IGV4ZWN1dGluZyBhcyBzb29uIGFz
IHRoZQogICAgIC8vIGFwcHJvcHJpYXRlIGxvY2tzIGhhdmUgYmVlbiBhY3F1aXJlZC4KQEAgLTI1
MCw3ICsyNTksNyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJh
bnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogICAgICAgICBBU1NFUlQoZWMp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25C
YWNrZW5kLCBtb2RlLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShjb250ZXh0LCB0cmFuc2FjdGlvbkJhY2tlbmQs
ICpzdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKICAgICB0cmFuc2FjdGlvbkJhY2tlbmQtPnNldENh
bGxiYWNrcyh0cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVh
c2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggYzM2ZDhjMzI5YTBlZmY4YjZiYmU1
ZTFkY2FiMTM4MTVlZGU0YTE1My4uN2RhNTQzMmQzODJjMWI0ZTA4ZGU1ZWJhNWI4MDk2YzY0ZGJm
NTQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE2NywxMyArMTY3LDEzIEBAIElEQkRh
dGFiYXNlTWV0YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAog
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KE4pLmluZGV4ZXMgdXAgdG8gZGF0ZSByYXRoZXIgdGhhbiByZWdlbmVyYXRpbmcg
dGhpcyBldmVyeSB0aW1lLgogICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRh
ZGF0YSk7CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29i
amVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOworICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT52YWx1ZS0+aWQo
KSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhuYW1lKSk7CisgICAgQVNT
RVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOwogCiAgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIElEQk9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUlu
ZGV4SWQpKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKQEAgLTE5
Myw3ICsxOTMsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0UwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAg
IG1fb2JqZWN0U3RvcmVzLnNldChpZCwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RT
dG9yZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTIwNywxNyArMjA3LDI3IEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShp
bnQ2NF90IGlkKQogewotICAgIHJldHVybiBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CisgICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
K2ludDY0X3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZChjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUp
KTsKKyAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0
U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0
X3QgaWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhp
ZCkpOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhp
czsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBt
X29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCkBAIC0yMjcsNyAr
MjM3LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKKyAgICBtX29iamVjdFN0b3Jl
cy5yZW1vdmUoaWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9i
amVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24pCkBAIC00MjEsMjAgKzQzMSwxOSBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQogICAgIEFTU0VSVChtX3BlbmRpbmdP
cGVuQ2FsbHMuaXNFbXB0eSgpKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0cmlu
Z0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqLCB1bnNpZ25lZCBz
aG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdFN0b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX29iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZU5hbWVzLT5pdGVtKGkpKSkgewotICAgICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKKyAgICAvLyBGSVhNRTogRmly
c3QgcGFyYW1ldGVyIGlzbid0IHVzZWQgZm9yIGFueXRoaW5nIHlldCBhbnl3YXksIGFuZCB0aGlz
IG1ldGhvZCBpcyBnb2luZyBhd2F5LgorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShWZWN0
b3I8aW50NjRfdD4oKSwgbW9kZSwgdGhpcyk7CiAgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQogCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24ob2JqZWN0
U3RvcmVJZHMsIG1vZGUpOworfQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5D
b25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogewogICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZS5nZXQoKSk7CkBAIC02MTEsMjEgKzYyMCwyMSBAQCB2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogICAgIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBvYmplY3RTdG9yZXMgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3Rv
cmVzKG1fbWV0YWRhdGEuaWQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZXNbaV0ubmFtZSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVj
dFN0b3Jlc1tpXSkpOworICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ld
LmlkLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVz
W2ldKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3Rv
cmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IHBycE9iamVjdFN0b3JlKQogewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHBycE9iamVjdFN0b3JlOwotICAgIEFTU0VSVChkYXRhYmFzZS0+
bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPm5hbWUoKSkpOwotICAgIGRhdGFi
YXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPm5hbWUoKSk7CisgICAgQVNT
RVJUKGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+aWQoKSkp
OworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPmlkKCkp
OwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCiB7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlUHRyID0gb2JqZWN0U3RvcmU7Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVQdHItPm5hbWUoKSkpOwotICAgIGRhdGFiYXNlLT5tX29i
amVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOwor
ICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3Jl
UHRyLT5pZCgpKSk7CisgICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZVB0ci0+aWQoKSwgb2JqZWN0U3RvcmVQdHIpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1Zl
cnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4
IDExYTY5ZDBiZmRhNjZiMDYyMDFkMzk2M2MwZWUxNDRhYjg4ZTM1ZTguLmY1Y2U4MWQ2Y2I0MTVl
MzllMjFhNDU1YTIyMDIyOTExNDRiZjNlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTYyLDEy
ICs2MiwxNSBAQCBwdWJsaWM6CiAgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCiAg
ICAgdmlydHVhbCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBkZWxldGVPYmplY3RTdG9yZShnZXRPYmplY3RTdG9y
ZUlkKG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJh
bnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hvcnQpOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CiAKLSAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZShpbnQ2NF90IGlkKTsKKyAgICBpbnQ2NF90IGdldE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwpAQCAtMTAwLDcgKzEwMyw3IEBA
IHByaXZhdGU6CiAgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5j
ZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBp
dCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KICAgICBSZWZQdHI8SURC
RmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7CiAgICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9y
ZXM7CiAKICAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA0Y2QwODQ1YjQz
NmIyNzQ4N2IxZGMxNTdhMTg4MTdkMWZiZTE3YzQ5Li4wYzUzY2Q3Y2YxNTg5MWMwNTE3ZmQ5MzI0
MzljZTFiN2ExOTE5N2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTYsOCAr
NTYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgdW5zaWduZWQgc2hvcnQgbW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCA4NTM1NzU3ZjIwNjU1
MTcwMTViODEwNDFmZTEyYzZhMDY1OTRkNmIxLi5lNzg5MTNiYTA0Y2JiYzczMzIyODNmMDVmNGJh
YWE1MDAwYjNlMGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAppbmRleCA0MjE5MTU3
OTI1OTM2NzI5MTZiZjc5OTA1NTg4NTUzOWQ4ZTI2ZjZjLi5kMGU3NGQ1NzQxZjYyNTdmODA0ZTc5
ODVjZWU2YTMzMjM0ODdkMzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeS5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWZuZGVmIElEQkZhY3RvcnlfaAog
I2RlZmluZSBJREJGYWN0b3J5X2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNs
dWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQk9wZW5EQlJl
cXVlc3QuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggZTEwYzM2ZDIyYjk1YjhiODQ5MDkxNjIz
ZDhkZTIzZjlhODc1MWU1ZC4uM2UwNGVlMWQ0YzVhY2RlNTMyNjUyOTVlYmZlNThiODEzYTdiYTEz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC01
Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KICAgICBib29sIHVuaXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGEudW5pcXVlOyB9CiAgICAgYm9vbCBtdWx0aUVudHJ5KCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9CisgICAgaW50NjRfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KIAogICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9k
aWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgogICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNf
Y2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0KQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5
UmFuZ2UqPigwKSwgZWMpOyB9IAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+
KDApLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQs
IGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCmluZGV4IDA3
NjFmMDY4MWJiYzlkYjA2ZDU3Nzk5ZjcwMzllZDdhMTY4NGRmODUuLmM5MmZjOGQ0OTUyZmM0Yjhm
YTgyMjhhNGVmODhiYmM1OGNlZmZkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKaW5kZXggNjM1MWU2ZmI4ZTc3MDAyNjJmNmRjMzVk
ZjAzMTIwOTgxM2IyMDlkMC4uYmFjOGNlYTA2NWZjODBkNzdlYjI1YWEyYWJlY2FjMjEzNjA5NDhi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0j
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaAppbmRleCA3
NjhlYmJhZjRhNjM2MTk5YjlkYTAwMjY3ZTJjMGQ0NzZkYzliODBhLi4xYjAzODRiZDk1NjkxZTRj
ZmE3NzFjNDE5Mjg1NzJjOWMyYjE2MDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKQEAgLTM4LDM3ICszOCwyMSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwotc3RydWN0IElEQklu
ZGV4TWV0YWRhdGE7Ci0KLXN0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhIHsKLSAgICAvLyBGSVhN
RTogVGhlc2UgY2FuIHByb2JhYmx5IGJlIGNvbGxhcHNlZCBpbnRvIDAuCi0gICAgZW51bSB7Ci0g
ICAgICAgIE5vSW50VmVyc2lvbiA9IC0xLAotICAgICAgICBEZWZhdWx0SW50VmVyc2lvbiA9IDAK
LSAgICB9OwotCi0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSgpCi0gICAgICAgIDogaW50VmVyc2lv
bihOb0ludFZlcnNpb24pCi0gICAgewotICAgIH0KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2
NF90IGludFZlcnNpb24sIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCkKK3N0cnVjdCBJREJJbmRl
eE1ldGFkYXRhIHsKKyAgICBJREJJbmRleE1ldGFkYXRhKCkgeyB9CisgICAgSURCSW5kZXhNZXRh
ZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCiAgICAgICAgIDogbmFtZShuYW1l
KQogICAgICAgICAsIGlkKGlkKQotICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKLSAgICAgICAg
LCBpbnRWZXJzaW9uKGludFZlcnNpb24pCi0gICAgICAgICwgbWF4T2JqZWN0U3RvcmVJZChtYXhP
YmplY3RTdG9yZUlkKQotICAgIHsKLSAgICB9Ci0KKyAgICAgICAgLCBrZXlQYXRoKGtleVBhdGgp
CisgICAgICAgICwgdW5pcXVlKHVuaXF1ZSkKKyAgICAgICAgLCBtdWx0aUVudHJ5KG11bHRpRW50
cnkpIHsgfQogICAgIFN0cmluZyBuYW1lOwogICAgIGludDY0X3QgaWQ7Ci0gICAgU3RyaW5nIHZl
cnNpb247Ci0gICAgaW50NjRfdCBpbnRWZXJzaW9uOwotICAgIGludDY0X3QgbWF4T2JqZWN0U3Rv
cmVJZDsKKyAgICBJREJLZXlQYXRoIGtleVBhdGg7CisgICAgYm9vbCB1bmlxdWU7CisgICAgYm9v
bCBtdWx0aUVudHJ5OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YT4gT2JqZWN0U3RvcmVNYXA7Ci0gICAgT2JqZWN0U3RvcmVNYXAgb2JqZWN0U3Rv
cmVzOworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOwogfTsKIAogc3Ry
dWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgewpAQCAtODcsMjMgKzcxLDY2IEBAIHN0cnVjdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICBib29sIGF1dG9JbmNyZW1lbnQ7CiAgICAgaW50
NjRfdCBtYXhJbmRleElkOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCSW5kZXhN
ZXRhZGF0YT4gSW5kZXhNYXA7CisgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0g
LTE7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5k
ZXhNYXA7CiAgICAgSW5kZXhNYXAgaW5kZXhlczsKKworICAgIGJvb2wgY29udGFpbnNJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKEluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gaW5kZXhlcy5lbmQoKTsg
KytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIH07CiAKLXN0cnVjdCBJREJJbmRleE1ldGFkYXRhIHsKLSAgICBJREJJbmRleE1ldGFk
YXRhKCkgeyB9Ci0gICAgSURCSW5kZXhNZXRhZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0
X3QgaWQsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnkpCitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CisgICAgLy8gRklYTUU6IFRoZXNl
IGNhbiBwcm9iYWJseSBiZSBjb2xsYXBzZWQgaW50byAwLgorICAgIGVudW0geworICAgICAgICBO
b0ludFZlcnNpb24gPSAtMSwKKyAgICAgICAgRGVmYXVsdEludFZlcnNpb24gPSAwCisgICAgfTsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBP
YmplY3RTdG9yZU1hcDsKKworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEoKQorICAgICAgICA6IGlu
dFZlcnNpb24oTm9JbnRWZXJzaW9uKQorICAgIHsKKyAgICB9CisgICAgSURCRGF0YWJhc2VNZXRh
ZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCiAgICAgICAg
IDogbmFtZShuYW1lKQogICAgICAgICAsIGlkKGlkKQotICAgICAgICAsIGtleVBhdGgoa2V5UGF0
aCkKLSAgICAgICAgLCB1bmlxdWUodW5pcXVlKQotICAgICAgICAsIG11bHRpRW50cnkobXVsdGlF
bnRyeSkgeyB9CisgICAgICAgICwgdmVyc2lvbih2ZXJzaW9uKQorICAgICAgICAsIGludFZlcnNp
b24oaW50VmVyc2lvbikKKyAgICAgICAgLCBtYXhPYmplY3RTdG9yZUlkKG1heE9iamVjdFN0b3Jl
SWQpCisgICAgeworICAgIH0KKworICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3Jl
cy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbnZhbGlkSWQ7CisgICAgfQorCisgICAgYm9vbCBjb250YWluc09iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kT2JqZWN0U3Rv
cmUobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOworICAgIH0KKwog
ICAgIFN0cmluZyBuYW1lOwogICAgIGludDY0X3QgaWQ7Ci0gICAgSURCS2V5UGF0aCBrZXlQYXRo
OwotICAgIGJvb2wgdW5pcXVlOwotICAgIGJvb2wgbXVsdGlFbnRyeTsKKyAgICBTdHJpbmcgdmVy
c2lvbjsKKyAgICBpbnQ2NF90IGludFZlcnNpb247CisgICAgaW50NjRfdCBtYXhPYmplY3RTdG9y
ZUlkOworCisgICAgT2JqZWN0U3RvcmVNYXAgb2JqZWN0U3RvcmVzOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IGZjNjU3M2ExOGEyODZlYzBhNjI1Y2Y2YTU1ZGY2NTJlMWFkN2FiYTMuLmQ5ZDJlYzI4MDQ5
NTk0ZTI3MDg4ZDFmZmNmZDIzMjE2OTc2NTE2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNv
bnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmtleSk7Cisg
ICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+dmFsdWUubmFtZSk7CiAgICAgaW5kZXhOYW1l
cy0+c29ydCgpOwogICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTIwOSw3
ICsyMDksNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgewogICAg
ICAgICBJbmRleEtleXMga2V5czsKICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShp
dC0+dmFsdWUsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5r
ZXkpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+dmFsdWUubmFtZSk7CiAgICAgICAg
IGluZGV4S2V5cy5hcHBlbmQoa2V5cyk7CiAgICAgfQogICAgIEFTU0VSVChpbmRleEtleXMuc2l6
ZSgpID09IGluZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTM4Miw3ICszODIsNyBAQCBQYXNzUmVmUHRy
PElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dAogICAgICAgICBlYyA9IE5BVElWRV9UWVBFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIGlmIChtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkp
IHsKKyAgICBpZiAobV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKSB7CiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2Jq
ZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAg
ICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1
ZSwgbXVsdGlFbnRyeSk7CiAgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4Ojpj
cmVhdGUobWV0YWRhdGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKLSAgICBtX21ldGFk
YXRhLmluZGV4ZXMuc2V0KG5hbWUsIG1ldGFkYXRhKTsKKyAgICBtX21ldGFkYXRhLmluZGV4ZXMu
c2V0KGluZGV4SWQsIG1ldGFkYXRhKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAgIGlmIChlYykK
QEAgLTQ0NCwxNSArNDQ0LDI0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgaWYgKGl0
ICE9IG1faW5kZXhNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQt
PmluZGV4KG5hbWUsIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJ
ZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0
aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgotICAgIGlmIChlYykKKyAgICBpZiAoIW1fbWV0YWRh
dGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBt
X21ldGFkYXRhLmluZGV4ZXMuZmluZChuYW1lKTsKLSAgICBBU1NFUlQobWRpdCAhPSBtX21ldGFk
YXRhLmluZGV4ZXMuZW5kKCkpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIEFTU0VSVCgh
ZWMgJiYgaW5kZXhCYWNrZW5kKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJ
bmRleDo6Y3JlYXRlKG1kaXQtPnZhbHVlLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhKiBpbmRleE1l
dGFkYXRhKDApOworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0
YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUg
PT0gbmFtZSkgeworICAgICAgICAgICAgaW5kZXhNZXRhZGF0YSA9ICZpdC0+dmFsdWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5kZXhNZXRhZGF0
YSk7CisKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZSgqaW5k
ZXhNZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwogICAgIHJldHVybiBpbmRl
eC5yZWxlYXNlKCk7CiB9CkBAIC00NjcsMjEgKzQ3NiwyMCBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFtX21ldGFkYXRhLmluZGV4ZXMuY29u
dGFpbnMobmFtZSkpIHsKKyAgICBpZiAoIW1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgobmFt
ZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgeworICAgICAg
ICBBU1NFUlQobV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKTsKICAgICAgICAgSURCSW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOwogICAgICAgICBpZiAo
aXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgeworICAgICAgICAgICAgbV9tZXRhZGF0YS5pbmRleGVz
LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgICAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVs
ZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CiAgICAgICAgIH0K
LQotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKLSAg
ICAgICAgbV9tZXRhZGF0YS5pbmRleGVzLnJlbW92ZShuYW1lKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMjNhMzM2N2Y0YzNiNTYzODM2ZTU1YWM0OThkNzU3
NjFkMjAxMDQ0Ni4uOTc2YWQwYmRiN2I5N2I4YmRhYjcyMjJlOTkwNjk1ZGVjY2JhNWE2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCkBA
IC0xMDcsNyArMTA2LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRh
KSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5
cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0
IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CiAKQEAgLTExOCwxNiArMTE3
LDIwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURC
VHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBu
ZXdJbmRleE5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsK
KyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+
ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJbmRleEtleXM+KGluZGV4S2V5
cykpOwogCiAgICAgQVNTRVJUKGF1dG9JbmNyZW1lbnQoKSB8fCBrZXkpOwogCiAgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZh
bHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG5ld0luZGV4TmFtZXMu
cmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCisgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRl
eElkcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCX0FCT1JUX0VSUikpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAg
ICByZXR1cm4gcHV0KHBycFZhbHVlLCBwcnBLZXksIHB1dE1vZGUsIHBycENhbGxiYWNrcywgdHJh
bnNhY3Rpb25QdHIsIGdldEluZGV4SWRzKGluZGV4TmFtZXMpLCBpbmRleEtleXMpOworfQogbmFt
ZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKQEAgLTE1Nyw4ICsxNjAsOSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJ
bmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgY29uc3QKKyAgICBib29s
IHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAogICAgIHsKKyAgICAgICAgaW50
NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWJh
Y2tpbmdTdG9yZS5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJlY29yZElkZW50aWZpZXIpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2OCw4ICsxNzIsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleE1ldGFkYXRhLm5hbWU7IH0KLQogcHJpdmF0ZToKIAogICAgIGJv
b2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sCkBAIC0xOTMsMTMgKzE5NSwxMyBA
QCBwcml2YXRlOgogfTsKIH0KIAotc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXks
IGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzLCBj
b25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBp
bmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3Ry
aW5nKiBlcnJvck1lc3NhZ2UpCitzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwg
Ym9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJp
bmcqIGVycm9yTWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoaW5kZXhOYW1lcy5zaXplKCkgPT0gaW5k
ZXhLZXlzLnNpemUoKSk7CisgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMu
c2l6ZSgpKTsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlNYXA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmRleE5hbWVzLnNpemUoKTsgaSsrKQotICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhO
YW1lc1tpXSwgaW5kZXhLZXlzW2ldKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleU1hcDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGluZGV4SWRzLnNpemUoKTsgKytpKQorICAgICAgICBpbmRleEtleU1h
cC5hZGQoaW5kZXhJZHNbaV0sIGluZGV4S2V5c1tpXSk7CiAKICAgICBmb3IgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5pdGVy
SW5kZXhlc0JlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0VuZCgpOyArK2l0
KSB7CiAKQEAgLTIyOCw3ICsyMzAsNyBAQCBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2V0SW5kZXhLZXlzIik7CiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1h
cnlLZXk7CkBAIC0yNDMsNyArMjQ1LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKIAogICAg
IFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCB0aGlz
LCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJz
LCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlv
biwgdGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdy
aXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwg
d2l0aCBlcnJvck1lc3NhZ2UgaGVyZS4gbWFrZUluZGV4V3JpdGVycyBvbmx5IGZhaWxzIG9uIHVu
aXF1ZW5lc3MgY29uc3RyYWludCBlcnJvcnMuCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSLCAiRHVwbGljYXRlIGluZGV4IGtleXMgZXhpc3QgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTI1MSw0NiArMjUzLDY4IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7
ICsraSkgewogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29y
ZElkZW50aWZpZXIuZ2V0KCksICpiYWNraW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgbV9tZXRhZGF0YS5pZCwgbV9pbmRleGVz
LmdldChpbmRleFdyaXRlci0+aW5kZXhOYW1lKCkpLT5pZCgpKSkgeworICAgICAgICBpZiAoIWlu
ZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqYmFja2lu
Z1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFz
ZUlkKCksIG1fbWV0YWRhdGEuaWQpKSB7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGluZGV4TmFtZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25JbnRlcmZhY2UpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCit7CisgICAgVmVjdG9yPGlu
dDY0X3Q+IGluZGV4SWRzID0gZ2V0SW5kZXhJZHMoaW5kZXhOYW1lcyk7CisgICAgcmV0dXJuIHNl
dEluZGV4S2V5cyhwcnBQcmltYXJ5S2V5LCBpbmRleElkcywgaW5kZXhLZXlzLCB0cmFuc2FjdGlv
blB0cik7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1Jl
YWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb25JbnRlcmZhY2UpCiB7CiAgICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkiKTsKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwogCi0gICAgT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gbmFtZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oaW5k
ZXhOYW1lcykpOworICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBuZXdJbmRleElkcyA9IGFk
b3B0UHRyKG5ldyBWZWN0b3I8aW50NjRfdD4oaW5kZXhJZHMpKTsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlKTsKIAogICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzaygKICAgICAgICAgICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZTo6UHJlZW1wdGl2ZVRhc2ssCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsLCBvYmplY3RTdG9y
ZSwgbmFtZXMucmVsZWFzZSgpLCB0cmFuc2FjdGlvbikpKQorICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFt
ZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25JbnRlcmZhY2Up
Cit7CisgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKGluZGV4TmFtZXMuc2l6ZSgpKTsKKyAg
ICAvLyBGSVhNRTogV2UgbWFudWFsbHkgY29udmVydCBlYWNoIG5hbWUgdG8gYW4gaW5kZXhJZCwg
ZXZlbiBpZiB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIGJlY2F1c2Ugd2UgaGF2
ZSB0byByZW1vdmUgZXhhY3RseSB0aGF0IG1hbnkgcHJlZW1wdGl2ZSBldmVudHMsIGJ1dCB0aGlz
IHdpbGwgZ28gYXdheSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDA0MjYgbGFuZHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleE5hbWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGluZGV4SWRzW2ldID0gSW52YWxpZElkOworICAgICAgICBm
b3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPm5h
bWUoKSA9PSBpbmRleE5hbWVzW2ldKSB7CisgICAgICAgICAgICAgICAgaW5kZXhJZHNbaV0gPSBp
dC0+a2V5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBzZXRJbmRleGVzUmVhZHkoaW5kZXhJZHMsIHRyYW5zYWN0aW9u
SW50ZXJmYWNlKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc093blB0cjxWZWN0b3I8aW50
NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsIik7Ci0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+
ID4gaW5kZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmRleE5hbWVzLT5zaXplKCk7ICsraSkKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
aW5kZXhJZHMgPSBwb3BJbmRleElkczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
SWRzLT5zaXplKCk7ICsraSkKICAgICAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlUHJlZW1w
dGl2ZUV2ZW50KCk7CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBwcnBUcmFuc2FjdGlvbiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFt
ZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2Fj
dGlvbiwgUGFzc093blB0cjxWZWN0b3I8aW50NjQ+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8
VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOwogICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwog
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+
IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVzOworICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4g
PiBpbmRleElkcyA9IHBvcEluZGV4SWRzOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+
IGluZGV4S2V5cyA9IHBvcEluZGV4S2V5czsKLSAgICBBU1NFUlQoaW5kZXhOYW1lcyAmJiBpbmRl
eEtleXMgJiYgaW5kZXhOYW1lcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgpKTsKKyAgICBB
U1NFUlQoaW5kZXhJZHMgJiYgaW5kZXhLZXlzICYmIGluZGV4SWRzLT5zaXplKCkgPT0gaW5kZXhL
ZXlzLT5zaXplKCkpOwogICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIApA
QCAtMzE0LDcgKzMzOCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUu
Z2V0KCksIGtleSwga2V5V2FzR2VuZXJhdGVkLCAqaW5kZXhOYW1lcywgKmluZGV4S2V5cywgJmlu
ZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnMo
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVyYXRlZCwgKmlu
ZGV4SWRzLCAqaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewogICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMzAsNyArMzU0LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQo
KTsKLSAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRp
Zmllci5nZXQoKSwgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVj
dFN0b3JlLT5tX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChpbmRleFdy
aXRlci0+aW5kZXhOYW1lKCkpLT5pZCgpKSkgeworICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53
cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpKSB7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0
aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIik7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoZXJyb3IpOwpAQCAtMzczLDcgKzM5Nyw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
CiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIoKTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlk
KCksIGl0LT52YWx1ZS0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+a2V5LCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgfQogCkBAIC00MTAsNyArNDM0LDcgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHQKIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
bV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhlcy5j
b250YWlucyhpZCksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAlcyIsIG5hbWUudXRmOCgpLmRh
dGEoKSk7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRl
eEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgSURCSW5kZXhNZXRhZGF0YShu
YW1lLCBpZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CiAgICAgQVNTRVJUKGluZGV4
LT5uYW1lKCkgPT0gbmFtZSk7CkBAIC00MjgsNyArNDUyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4
KGludDYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgbV9pbmRleGVzLnNldChuYW1l
LCBpbmRleCk7CisgICAgbV9pbmRleGVzLnNldChpZCwgaW5kZXgpOwogICAgIHJldHVybiBpbmRl
eC5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ0MiwyMiArNDY2LDQyIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzCiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1Q
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjppbmRleChpbnQ2NF90IGluZGV4SWQpCiB7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQoaW5kZXhJZCk7CisgICAgQVNTRVJUKGluZGV4KTsK
ICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICByZXR1
cm4gaW5kZXgoZ2V0SW5kZXhJZChuYW1lKSk7Cit9CisKK2ludDY0X3QgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Z2V0SW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgZm9yIChJ
bmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBu
YW1lKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitWZWN0b3I8aW50NjRfdD4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW5kZXhJZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5hbWVz
KQogewotICAgIEFTU0VSVChtX2luZGV4ZXMuY29udGFpbnMobmFtZSkpOworICAgIFZlY3Rvcjxp
bnQ2NF90PiByZXN1bHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRJbmRleElkKG5hbWVzW2ldKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX2luZGV4
ZXMuY29udGFpbnMoaW5kZXhJZCkpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQoaW5kZXhJZCk7CiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtNDY3LDcgKzUxMSwx
MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbV9pbmRleGVzLnJlbW92ZShuYW1lKTsKKyAgICBtX2luZGV4ZXMucmVtb3ZlKGluZGV4
SWQpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGRlbGV0ZUluZGV4KGdl
dEluZGV4SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7CiB9CiAKIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKQEAgLTU0MSwyMCArNTkwLDIwIEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQogICAgIFZlY3RvcjxJ
REJJbmRleE1ldGFkYXRhPiBpbmRleGVzID0gYmFja2luZ1N0b3JlKCktPmdldEluZGV4ZXMoZGF0
YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLm5h
bWUsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVz
W2ldKSk7CisgICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIGluZGV4ZXNbaV0pKTsKIH0KIAogdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiB7Ci0gICAg
QVNTRVJUKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXgtPm5hbWUoKSkpOwot
ICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3ZlKGluZGV4LT5uYW1lKCkpOworICAgIEFT
U0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5pZCgpKSk7CisgICAg
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUoaW5kZXgtPmlkKCkpOwogfQogCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiB7CiAgICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4UHRyID0gaW5kZXg7Ci0gICAgQVNTRVJUKCFvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4UHRyLT5uYW1lKCkpKTsKLSAgICBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+bmFtZSgpLCBpbmRleFB0cik7CisgICAgQVNT
RVJUKCFvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4UHRyLT5pZCgpKSk7Cisg
ICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPmlkKCksIGluZGV4UHRyKTsK
IH0KIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVy
YXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24p
CkBAIC01NzMsNyArNjIyLDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp1cGRh
dGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2sKICAgICBiYWNraW5n
U3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19j
YXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CiB9
CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaAppbmRleCA5MDhlN2YyMzhlZmYwMDg0YTdkMzY5ZTAyMjU0NDA4MzVmYjY2NWNhLi5jMmVm
ZDNiMGUzYTIxYjYxMjRlMDQ5Y2IwMTIwZDdiZjI0ZjY4Yzk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4gSW5kZXhNYXA7Ci0gICAgCisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFw
OworCiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90
IGlkKCkgY29uc3QKICAgICB7CkBAIC02NSwxNCArNjUsMjAgQEAgcHVibGljOgogICAgIC8vIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYp
OworCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBjcmVhdGVJbmRleChpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4
S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2
b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleChpbnQ2NF90KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTg2LDEwICs5MiwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CiAgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQog
ICAgIGNvbnN0IGJvb2wmIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRh
LmF1dG9JbmNyZW1lbnQ7IH0KLSAgICAKKwogICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNraW5nU3RvcmUo
KTsgfQogICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2Ut
PmlkKCk7IH0KLSAgICAKKworICAgIGludDY0X3QgZ2V0SW5kZXhJZChjb25zdCBTdHJpbmcmKTsK
KyAgICBWZWN0b3I8aW50NjRfdD4gZ2V0SW5kZXhJZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsK
KwogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAKQEAgLTk4
LDkgKzEwNyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVj
a0N1cnJlbnQpOwogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhO
YW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKKyAgICBzdGF0aWMgdm9pZCBw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNz
UmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRf
dD4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwogICAg
IHN0YXRpYyB2b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNS
ZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4
TmFtZXMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRp
YyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgY3Jl
YXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQg
ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM2ZWExM2M1MDE5ZDhjZjgzMGJmMWRmOTA2Mzg4MWYx
ZDQ4ZDY4ZGQuLjlhYmU4ODNjYmE4ZWVjZDE0MmMwY2M5YzY4MGU4NjhkNGFhZWIyNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCkBAIC02MywxNiArNjMsMjIgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlzOwogCiAgICAg
dmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBW
ZWN0b3I8SW5kZXhLZXlzPiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24o
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNS
ZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAw
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3Bl
bkRCUmVxdWVzdC5jcHAKaW5kZXggZTA3MGI4YmQ3NmRiMDk2MjM4ZGNiMGIzNTg1ZjhhZWU0Nzc3
NDFjYS4uYjIzOTAxNjE5YmNhM2ExMDlhZmE2ZDI1YThhOGQ3ZTVlZjc4MjRjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5j
cHAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVk
ZWQoaW50NjRfdCBvbGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQlRyYW5zYWMKICAgICBtX2RhdGFi
YXNlQ2FsbGJhY2tzLT5jb25uZWN0KGlkYkRhdGFiYXNlLmdldCgpKTsKICAgICBtX2RhdGFiYXNl
Q2FsbGJhY2tzID0gMDsKIAotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQgPSBJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rp
b25CYWNrZW5kLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGlkYkRhdGFiYXNlLmdl
dCgpLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJh
bnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uQmFj
a2VuZCwgVmVjdG9yPFN0cmluZz4oKSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBp
ZGJEYXRhYmFzZS5nZXQoKSwgdGhpcyk7CiAgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxs
YmFja3MoZnJvbnRlbmQuZ2V0KCkpOwogICAgIG1fdHJhbnNhY3Rpb24gPSBmcm9udGVuZDsKICAg
ICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGlkYkRhdGFiYXNlLnJlbGVhc2UoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDJj
MmQxMmQzZjM4OWQzZTVlYmZiMzNjYTczNjFkYTkzYmRlMmMzOWQuLjcwNDZhMjRkYTQ4NWIyMTc0
YTZjNjAwODMxZTA4NTRhZTk1NTI4N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHBycEJhY2tlbmQKICAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQgPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCwgVmVjdG9yPFN0cmluZz4oKSwgSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS5nZXQo
KSk7CiAgICAgYmFja2VuZC0+c2V0Q2FsbGJhY2tzKGZyb250ZW5kLmdldCgpKTsKICAgICBtX3Ry
YW5zYWN0aW9uID0gZnJvbnRlbmQ7CiAKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQogewogICAgIGlmIChtX3RyYW5z
YWN0aW9uICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNl
dEVycm9yKERPTUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFt
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUikpKTsKLSAgICAgICAgRXhjZXB0
aW9uQ29kZSB1bnVzZWQ7IAorICAgICAgICBFeGNlcHRpb25Db2RlIHVudXNlZDsKICAgICAgICAg
bV90cmFuc2FjdGlvbi0+YWJvcnQodW51c2VkKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggOGVjMTVl
NWVjMDczZGZmYjFmYjE2MTBlZTg2NDAzMjFlMDQ5YTQyYS4uNDcwMDVjM2I3NjFlMjBjMjVmMDg5
MTIxYzQ2MzdmMzBiYTg3M2ZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtNDQsMTUgKzQ0LDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCVHJhbnNhY3Rpb246Ok1v
ZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURC
VHJhbnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUs
IElEQkRhdGFiYXNlKiBkYikKIHsKICAgICBJREJPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0
ID0gMDsKLSAgICByZXR1cm4gY3JlYXRlKGNvbnRleHQsIGJhY2tlbmQsIG1vZGUsIGRiLCBvcGVu
REJSZXF1ZXN0KTsKKyAgICByZXR1cm4gY3JlYXRlKGNvbnRleHQsIGJhY2tlbmQsIG9iamVjdFN0
b3JlTmFtZXMsIG1vZGUsIGRiLCBvcGVuREJSZXF1ZXN0KTsKIH0KIAotUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCVHJhbnNhY3Rpb246Ok1vZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiLCBJREJPcGVu
REJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0KQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURC
VHJhbnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUs
IElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCkKIHsKLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVmKG5ldyBJREJUcmFu
c2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBtb2RlLCBkYiwgb3BlbkRCUmVxdWVzdCkpKTsKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVmKG5ldyBJREJUcmFu
c2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCBkYiwgb3Bl
bkRCUmVxdWVzdCkpKTsKICAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAg
cmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KQEAgLTg4LDEwICs4OCwxMSBAQCBjb25z
dCBBdG9taWNTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlTGVnYWN5KCkKIH0K
IAogCi1JREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJh
Y2tlbmQsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3Bl
bkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCkKK0lEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVj
dFN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uOjpNb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwg
SURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChj
b250ZXh0LCB0aGlzKQogICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX2RhdGFiYXNl
KGRiKQorICAgICwgbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCiAgICAgLCBt
X29wZW5EQlJlcXVlc3Qob3BlbkRCUmVxdWVzdCkKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwg
bV9hY3RpdmUodHJ1ZSkKQEAgLTE1NSwxNiArMTU2LDE5IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwCiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBpdC0+dmFsdWU7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsK
LSAgICBBU1NFUlQoIW9iamVjdFN0b3JlQmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3Qg
Z2V0IGEgc3RvcmUsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCi0gICAgaWYgKGVjKQorICAgIGlmICghaXNWZXJzaW9uQ2hhbmdlKCkgJiYg
IW1fb2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0
b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMpOworICAgIEFTU0VS
VCghZWMgJiYgb2JqZWN0U3RvcmVCYWNrZW5kKTsKIAogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0
YWRhdGEmIG1ldGFkYXRhID0gbV9kYXRhYmFzZS0+bWV0YWRhdGEoKTsKLSAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5maW5kKG5hbWUpOwotICAgIEFTU0VSVChtZGl0ICE9IG1ldGFkYXRhLm9i
amVjdFN0b3Jlcy5lbmQoKSk7CisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWV0YWRhdGEu
ZmluZE9iamVjdFN0b3JlKG5hbWUpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWQgIT0gSURC
T2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKTsKIAotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1kaXQtPnZhbHVlLCBv
YmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2Jq
ZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5n
ZXQob2JqZWN0U3RvcmVJZCksIG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CiAgICAgb2JqZWN0
U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUu
cmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmgKaW5kZXggODk5MzliZjg1OTc1YjFjYjlmN2Y1MGI1MTk3ZjlmNmFjMzFi
ZmM5NS4uY2I4ZjBiOWMwYjE0ZDYxMGZiMmJkYjM3YTNjOGI2MTY0ZDhiZTQ1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCkBAIC0z
MCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJE
T01FcnJvci5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBA
IC01Niw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICAgICAgVkVSU0lPTl9DSEFOR0UgPSAyCiAgICAg
fTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiwgTW9kZSwgSURCRGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIE1vZGUsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRC
UmVxdWVzdCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIE1vZGUs
IElEQkRhdGFiYXNlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywg
TW9kZSwgSURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0Kik7CiAgICAgdmlydHVhbCB+SURC
VHJhbnNhY3Rpb24oKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1vZGVSZWFk
T25seSgpOwpAQCAtMTIyLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVk
PElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgSURCVHJh
bnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiwgTW9kZSwgSURCRGF0YWJhc2UqLCBJREJPcGVuREJSZXF1ZXN0
Kik7CisgICAgSURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBNb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3QqKTsKIAogICAgIHZvaWQgZW5x
dWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMo
KTsKQEAgLTE0NSw2ICsxNDQsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4g
bV9kYXRhYmFzZTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBtX29iamVjdFN0b3JlTmFtZXM7
CiAgICAgSURCT3BlbkRCUmVxdWVzdCogbV9vcGVuREJSZXF1ZXN0OwogICAgIGNvbnN0IE1vZGUg
bV9tb2RlOwogICAgIGJvb2wgbV9hY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmlu
ZGV4IGYxNjY1MTk0OWJhZDNjNWIxNTFiZWI0ZmY3NWYyNWQwNmI3MWEyNjYuLmUxNjUyZDY5NWRm
ODUzNDFiMzYwODZkODY3OWIxMzc0NDAyZmY4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCkBAIC0zOSwxMyArMzksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUs
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQorUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3JlcywgbW9kZSwgZGF0YWJhc2Up
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwob2Jq
ZWN0U3RvcmVJZHMsIG1vZGUsIGRhdGFiYXNlKSk7CiB9CiAKLUlEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZSkKLSAgICA6IG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCitJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlKQorICAgIDogbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9yZUlk
cykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVzZWQpCiAgICAgLCBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQpAQCAtNTUsOCArNTUsNiBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3Jl
cwogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogICAgICwgbV9wZW5kaW5nRXZl
bnRzKDApCiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVOYW1lcyk7Ci0gICAgQVNTRVJUKG1f
bW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgfHwgIW1fb2JqZWN0U3RvcmVO
YW1lcy0+aXNFbXB0eSgpKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwogfQogCkBAIC02NiwzMSArNjQsMjMgQEAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKQog
ICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKIH0KIAotUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6b2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYg
KG1fc3RhdGUgPT0gRmluaXNoZWQpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAg
ICAvLyBEb2VzIGEgbGluZWFyIHNlYXJjaCwgYnV0IGl0IHJlYWxseSBzaG91bGRuJ3QgYmUgdGhh
dCBzbG93IGluIHByYWN0aWNlLgotICAgIGlmIChtX21vZGUgIT0gSURCVHJhbnNhY3Rpb246OlZF
UlNJT05fQ0hBTkdFICYmICFtX29iamVjdFN0b3JlTmFtZXMtPmNvbnRhaW5zKG5hbWUpKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlLT5vYmplY3RTdG9yZShuYW1lKTsKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSByaWdodCBub3cgYmVhY3VzZSBhIHNldFZl
cnNpb24gdHJhbnNhY3Rpb24gY291bGQgbW9kaWZ5IHRoaW5ncwotICAgIC8vICAgICAgICBiZXR3
ZWVuIGl0cyBjcmVhdGlvbiAod2hlcmUgYW5vdGhlciBjaGVjayBvY2N1cnMpIGFuZCB0aGUgLm9i
amVjdFN0b3JlIGNhbGwuCi0gICAgLy8gICAgICAgIFRoZXJlJ3MgYSBidWcgdG8gbWFrZSB0aGlz
IGltcG9zc2libGUgaW4gdGhlIHNwZWMuIFdoZW4gd2UgbWFrZSBpdCBpbXBvc3NpYmxlIGhlcmUs
IHdlCi0gICAgLy8gICAgICAgIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICBpZiAoIW9iamVj
dFN0b3JlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9V
TkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUoaWQp
OworICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVh
c2UoKTsKIH0KIAorUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlKG1fZGF0YWJhc2Ut
PmdldE9iamVjdFN0b3JlSWQobmFtZSksIGVjKTsKK30KKwogYm9vbCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGFib3J0VGFzaykKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkK
QEAgLTEwMCw3ICs5MCw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1
bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlCiAgICAgICAgIG1fdGFz
a1F1ZXVlLmFwcGVuZCh0YXNrKTsKICAgICBlbHNlCiAgICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tR
dWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgCisKICAgICBpZiAoYWJvcnRUYXNrKQogICAgICAgICBt
X2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oCmluZGV4IDM0YTk3NTcwZjAwZmI3YTA4NGI4ZGQzODkzNDdhMjU0YTI1MzQ4NjIuLjRlNGRk
ZWNjMTEyMzY5NmNhNDY1NzUzZGI1ZjEyOTJiYzNjZTM2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5o
IgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaCIKQEAgLTQ1LDcgKzQ0LDcgQEAgY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVh
dGUoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCopOwogICAgIHN0YXRpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiBm
cm9tKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogaW50ZXJmYWNlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPihpbnRl
cmZhY2UpOwpAQCAtNTQsNiArNTMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3Mq
IGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxiYWNrczsgfQpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6
Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9y
ZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKIAog
ICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNr
cyB5ZXQuCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0YXNrRXZlbnRUaW1l
ckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CiAgICAgdm9pZCBjbG9z
ZU9wZW5DdXJzb3JzKCk7CiAKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9y
ZU5hbWVzOworICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwogICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IG1fbW9kZTsKIAogICAgIFN0YXRlIG1fc3RhdGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmluZGV4IGY3MDdmMzRhMDk5ODU0ZjQzOTIxODIz
OTRhMmYxZTcyNWNlMDU3NGMuLmQxMWUxODExY2U0MzViZjY3ZjA4MzNkM2U1NTgwNmI4ODdjZTRl
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCkBAIC01NCw2ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB9OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaAppbmRleCBhNzViN2JlMTQyYjk2NWExNWQ2MDYwMzZmY2ZhZDI4YTA5
MmM5YWVmLi5lN2I5ZmNhZmJiY2MwN2Q0NjRlNmQ3Y2RjNzM5ZmU3MTZjZDUyMmMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaAppbmRleCBhNDkzMmVlMjgyNDAwNjJkMTU3ZmNkMDJhNTlh
N2IyZjM3MGUxNzJiLi5mMDJiYmY0NGM0NDdkNTcwOGFmOWQ0MzdlYWNmOTVmOGQ0ODA2ZWY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykgeyBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgV2ViU3RyaW5n
JiB2ZXJzaW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0aW9uQ29kZSYp
IHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgLy8gVHJhbnNmZXJzIG93bmVy
c2hpcCBvZiB0aGUgV2ViSURCVHJhbnNhY3Rpb24gdG8gdGhlIGNhbGxlci4KICAgICB2aXJ0dWFs
IFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBu
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02Myw2
ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgdW5zaWduZWQgc2hvcnQg
bW9kZSkKKyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ2xvc2UoKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAppbmRleCBjYTAxMDNjZGE2ZmMzZjM3MmNh
ZGNhYWI3Y2Q2Y2UzMDVhMjI3ZDJlLi43YmRhMWEyMGRkMTQ2ODczYzRmNmUzOWE1NTI2ZTNjZDEx
YmM5NTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9i
amVjdFN0b3JlLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgV2ViVmVj
dG9yPFdlYklEQktleT4gV2ViSW5kZXhLZXlzOwogCiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJ
bmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5
JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdl
YkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mIGluZGV4SWRz
LCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktl
eVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJF
eGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
LCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAg
ICB2aXJ0dWFsIFdlYklEQkluZGV4KiBjcmVhdGVJbmRleChjb25zdCBXZWJTdHJpbmcmLCBjb25z
dCBXZWJJREJLZXlQYXRoJiwgYm9vbCwgYm9vbCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJikKQEAgLTY5LDE0ICs3MCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklE
QktleSYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYklu
ZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJL
ZXkmLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRl
eEtleXM+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9OwogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAg
b2YgdGhlIFdlYklEQkluZGV4IHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJJbmRl
eCogaW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJikKICAgICB7
CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGluZGV4KGxvbmcgbG9uZykKKyAgICB7
CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGxv
bmcgbG9uZyBpbmRleElkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNv
ZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBv
cGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KGNvbnN0IFdlYklE
QktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKaW5k
ZXggODE2YTMyODE0NzBiNzI5MmY0M2Q0NGQyMzJmMzAzYzRmYmI1ZDg0Ni4uYmFjMmRhODhkMDNh
NDA5YTk3ZTE5NDgzN2VmNGQwYmI3N2ZhNGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCkBAIC01MSw2ICs1MSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQorICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGxv
bmcgbG9uZywgV2ViRXhjZXB0aW9uQ29kZSYpCisgICAgeworICAgICAgICBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJh
c2VCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJh
c2VCYWNrZW5kUHJveHkuY3BwCmluZGV4IDI5YjhjNGJmNDFkY2FhZmE2MTllYjZhMGQxYTE1MTEx
NGMyOTFlNTMuLmY2ZDk2NDQ3MGVmYjQxNTE0NGZkYzFkMDQwODI5MDljZGNkOGU1MDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQ
cm94eS5jcHAKQEAgLTg1LDYgKzg1LDE0IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6
OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3RpCiAgICAg
bV93ZWJJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgKnRyYW5zYWN0aW9uUHJv
eHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRQcm94eTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJl
IGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8v
IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMu
CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0
aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBt
X3dlYklEQkRhdGFiYXNlLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCAqdHJhbnNh
Y3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOworfQorCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZFByb3h5OjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFT
U0VSVChtX3dlYklEQkRhdGFiYXNlKTsKQEAgLTEwMiw2ICsxMTAsMTUgQEAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZFByb3h5Ojp0
cmFuc2FjdGlvbigKICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6OmNyZWF0
ZSh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOwogfQogCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OnRyYW5zYWN0aW9uKGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUp
Cit7CisgICAgT3duUHRyPFdlYklEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IGFkb3B0UHRy
KG1fd2ViSURCRGF0YWJhc2UtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBtb2RlKSk7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gSURC
VHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6OmNyZWF0ZSh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOwor
fQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZFByb3h5OjpjbG9zZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPikKIHsKICAgICBtX3dlYklEQkRhdGFiYXNlLT5jbG9zZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5
LmgKaW5kZXggZmM4MzFlOGRlYzQ5YTc5ZTYxY2E3Y2JjZWY1YjQ2N2QxYzRiZDVmZC4uOTE2Zjgz
M2FiN2VmYmZjZDQwNjYxZWRhNzdmYTlhYzk1MzhkYzQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oCkBAIC00Niw4ICs0
NiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29sIGF1dG9JbmNy
ZW1lbnQsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVj
dFN0b3JlKGludDY0X3QsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihj
b25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBz
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hv
cnQgbW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
RGF0YWJhc2VDYWxsYmFja3M+KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAppbmRleCAy
YjliNDRhN2ExZmZjZGQ4MDIwNzVlYTBkMzhlNmI3YzA3MTc0OGE1Li42YTBkMDI3NzJiODQ0Yzdl
ZjZhYzIwZmJjZWMzY2MzMWQxZjM2MTQyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCkBAIC03Nyw2ICs3
NywxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXRXaXRoSW5kZXhLZXlz
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbAogICAgIG1fd2ViSURCT2JqZWN0U3RvcmUt
PnB1dFdpdGhJbmRleEtleXModmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3Rv
cmU6OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3Mp
LCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1l
cywgd2ViSW5kZXhLZXlzLCBlYyk7CiB9CiAKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cykKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50
ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVy
LAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5
IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJv
eHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9u
KTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8
V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tz
SW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7
CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBv
aW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTg3LDYgKzk1
LDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5z
ZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFy
YW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRl
cmVyLAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHBy
b3h5IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9u
UHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0
aW9uKTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJwUHJpbWFyeUtl
eSwgV2ViVmVjdG9yPGxvbmcgbG9uZz4oaW5kZXhJZHMpLCBpbmRleEtleXMsICp0cmFuc2FjdGlv
blByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eTo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVy
IHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xMzAsNyArMTQ2LDE1
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lCiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGlu
IHRoZSByZW5kZXJlciwKICAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZh
Y2VzIGFyZSBwcm94eSBvYmplY3RzLgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0
cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkq
Pih0cmFuc2FjdGlvbik7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5
KGluZGV4TmFtZXMsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsK
KyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoV2ViVmVjdG9yPFdlYlN0
cmluZz4oaW5kZXhOYW1lcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlv
bigpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1Jl
YWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGlu
IHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZh
Y2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0
cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkq
Pih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5
KFdlYlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdl
YklEQlRyYW5zYWN0aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDEsNiArMTY1LDE0IEBAIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgo
Y29uc3QgU3RyCiAgICAgcmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgu
cmVsZWFzZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChpbnQ2NF90IGluZGV4SWQpCit7CisgICAg
T3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2JqZWN0U3RvcmUt
PmluZGV4KGluZGV4SWQpKTsKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOwor
fQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCkBAIC0xNDksNiArMTgxLDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CCiAg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgKnRyYW5zYWN0aW9uUHJv
eHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3QgaW50NjRfdCBpbmRleElkLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEg
cG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFs
bCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNf
Y2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dl
YklEQk9iamVjdFN0b3JlLT5kZWxldGVJbmRleChpbmRleElkLCAqdHJhbnNhY3Rpb25Qcm94eS0+
Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOworfQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eTo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRv
IGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5LmgKaW5kZXggODQ3MGMxYWQ5MDViYzE1NmZkOWYzYjhmYzE0ZWZmMWU0MTFlOGJlYi4u
NzkxMTNhZTk1NjVhMzE0ZGNjZjJiYWM3ODBlYmE3NTM5NGY2Y2RhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5o
CkBAIC00NSwxNiArNDUsMjEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFz
c1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQ
dXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPGludDY0X3Q+Jiwg
Y29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVG
dW5jdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0
X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVs
dGlFbnRyeSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0
IFdURjo6VmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNS
ZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqKTsKKwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
aW5kZXgoaW50NjRfdCk7CiAgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFu
Z2U+LCBXZWJDb3JlOjpJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAppbmRleCA4OGY5ODUyYWNlZjRjNmU4OWE1ODllNDUy
NTllMjJiMWYzODZiMWU1Li5mMDgzN2ZlZjZhNDZlMWYzYzRmZGIyOTk5MTQwZTNlYzdhYmEyZTg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkuY3BwCkBAIC02Miw2ICs2MiwxNCBAQCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6Om9i
amVjdFN0bwogICAgIHJldHVybiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Y3JlYXRlKG9i
amVjdFN0b3JlLnJlbGVhc2UoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6b2JqZWN0
U3RvcmUoaW50NjRfdCBpbmRleElkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBPd25QdHI8
V2ViSURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gYWRvcHRQdHIobV93ZWJJREJUcmFuc2Fj
dGlvbi0+b2JqZWN0U3RvcmUoaW5kZXhJZCwgZWMpKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6
OmNyZWF0ZShvYmplY3RTdG9yZS5yZWxlYXNlKCkpOworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5Ojpjb21taXQoKQogewogICAgIG1fd2ViSURCVHJhbnNhY3Rpb24tPmNvbW1p
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmgKaW5kZXggN2U3NDg2YmQ3YzMyMDY2Y2MwMmQ2NzYxYzgwOTdjOWJj
ZGY1MzNlNS4uZThmMmMzMzc1NDgzNGRlYmU0NDY5NGRlMDRmYjAxY2Q5ZWU0MTg2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eS5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50
NjRfdCwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVUYXNrRXZlbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJDYWxsYmFja3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkNhbGxiYWNrc0ltcGwuY3BwCmluZGV4IGUwOWMxYTNmZWQyNDdkMmY1NWJlN2I5NzI1ZDVhMzky
NTNiNjk2NjYuLjhkMTJjZmEzZWE5YmFlMzJkNDdjMzM0ZmMwZTAxN2QwOTBkZGE3YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJDdXJzb3JCYWNrZW5kUHJveHkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFi
YXNlSW1wbC5jcHAKaW5kZXggZTcxMDI5ZGViMzQ4NDcxNWIxMzBkM2ExYjhmY2QzZjYwOGNiMDZj
Yi4uOTBjMjYyMzg5NDllNDRhMDc0Mjk5NTRjZjdkODllMTU2NTBlMWFhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCkBAIC03NSw2
ICs3NSwxMSBAQCB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcgogICAgIG1fZGF0YWJhc2VCYWNrZW5k
LT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCit2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6ZGVs
ZXRlT2JqZWN0U3RvcmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbV9kYXRh
YmFzZUJhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0aW9u
LmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7Cit9CisKIHZvaWQgV2Vi
SURCRGF0YWJhc2VJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgV2Vi
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1f
ZGF0YWJhc2VCYWNrZW5kLT5zZXRWZXJzaW9uKHZlcnNpb24sIElEQkNhbGxiYWNrc1Byb3h5Ojpj
cmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKQEAg
LTkxLDYgKzk2LDE3IEBAIFdlYklEQlRyYW5zYWN0aW9uKiBXZWJJREJEYXRhYmFzZUltcGw6OnRy
YW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmIG5hbWVzCiAgICAgcmV0dXJuIG5ldyBX
ZWJJREJUcmFuc2FjdGlvbkltcGwodHJhbnNhY3Rpb24pOwogfQogCitXZWJJREJUcmFuc2FjdGlv
biogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBs
b25nPiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCit7CisgICAgVmVjdG9y
PGludDY0X3Q+IG9iamVjdFN0b3JlSWRMaXN0KG9iamVjdFN0b3JlSWRzLnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgb2JqZWN0U3RvcmVJZExpc3RbaV0gPSBvYmplY3RTdG9yZUlkc1tpXTsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IG1fZGF0YWJhc2VC
YWNrZW5kLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkTGlzdCwgbW9kZSk7CisgICAgaWYgKCF0
cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBXZWJJREJUcmFu
c2FjdGlvbkltcGwodHJhbnNhY3Rpb24pOworfQorCiB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6
Y2xvc2UoKQogewogICAgIC8vIFVzZSB0aGUgY2FsbGJhY2tzIHBhc3NlZCBpbiB0byB0aGUgY29u
c3RydWN0b3Igc28gdGhhdCB0aGUgYmFja2VuZCBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaAppbmRleCA3NjliZGY1ZDA1ZjBiM2JiMWU4YjY1
ZjRlMDlmYzMyNzVlYmNhODYwLi42NWExOTY2OGE5YjcyOTc3NDc3OWI2YmU3NDE2YjdiNzQ4ZjI4
MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFz
ZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUlt
cGwuaApAQCAtNTQsOCArNTQsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBXZWJJREJPYmpl
Y3RTdG9yZSogY3JlYXRlT2JqZWN0U3RvcmUobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgV2Vi
U3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3Ry
aW5nTGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0
b3I8bG9uZyBsb25nPiYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwogICAgIHZpcnR1YWwg
dm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcAppbmRleCBkZDFjMmM4ZTU0
MGZmZWJiMzg4YWQyY2MxMzZiOGNlYmZmMDlkY2I3Li4yY2E1YmY3YzdkNmIyOWMyZTJhMDZmYmVm
YzY4NmM1MmVhOGM2YzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
TWV0YWRhdGEuY3BwCkBAIC00OSw2ICs0OSw3IEBAIFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRh
ZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBm
b3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBz
dG9yZUl0ZXJhdG9yID0gbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IHN0b3JlSXRlcmF0
b3IgIT0gbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK3N0b3JlSXRlcmF0b3IpIHsKICAg
ICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUgPSBzdG9yZUl0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgT2JqZWN0U3RvcmUgd2ViT2JqZWN0U3RvcmU7CisgICAg
ICAgIHdlYk9iamVjdFN0b3JlLmlkID0gb2JqZWN0U3RvcmUuaWQ7CiAgICAgICAgIHdlYk9iamVj
dFN0b3JlLm5hbWUgPSBvYmplY3RTdG9yZS5uYW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5r
ZXlQYXRoID0gb2JqZWN0U3RvcmUua2V5UGF0aDsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUuYXV0
b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQ7CkBAIC01OSw2ICs2MCw3IEBA
IFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmlu
ZGV4ZXMuYmVnaW4oKTsgaW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgp
OyArK2luZGV4SXRlcmF0b3IpIHsKICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4ID0gaW5kZXhJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBJbmRleCB3ZWJJbmRl
eDsKKyAgICAgICAgICAgIHdlYkluZGV4LmlkID0gaW5kZXguaWQ7CiAgICAgICAgICAgICB3ZWJJ
bmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAgICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBp
bmRleC5rZXlQYXRoOwogICAgICAgICAgICAgd2ViSW5kZXgudW5pcXVlID0gaW5kZXgudW5pcXVl
OwpAQCAtNzksOSArODEsOSBAQCBXZWJJREJNZXRhZGF0YTo6b3BlcmF0b3IgSURCRGF0YWJhc2VN
ZXRhZGF0YSgpIGNvbnN0CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViT2JqZWN0
U3RvcmUuaW5kZXhlcy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgSW5kZXggd2Vi
SW5kZXggPSB3ZWJPYmplY3RTdG9yZS5pbmRleGVzW2pdOwogICAgICAgICAgICAgSURCSW5kZXhN
ZXRhZGF0YSBpbmRleCh3ZWJJbmRleC5uYW1lLCB3ZWJJbmRleC5pZCwgd2ViSW5kZXgua2V5UGF0
aCwgd2ViSW5kZXgudW5pcXVlLCB3ZWJJbmRleC5tdWx0aUVudHJ5KTsKLSAgICAgICAgICAgIG9i
amVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4Lm5hbWUsIGluZGV4KTsKKyAgICAgICAgICAgIG9i
amVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4LmlkLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICAg
ICAgZGIub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5uYW1lLCBvYmplY3RTdG9yZSk7Cisg
ICAgICAgIGRiLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsK
ICAgICB9CiAgICAgcmV0dXJuIGRiOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggZDgxNDA5M2YwZjViMzQxZWIy
ZDk5ZDk3YzkxODI4YWM1MDUyMGQ0NS4uODViYWMxM2IzNDgwMGQ0MjBmMWNkMTg3NjBiZDk1NjM4
Y2Q2NGU1YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwCkBAIC03NSw2ICs3NSwyMyBAQCB2b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUm
IHZhbAogICAgIG1fb2JqZWN0U3RvcmUtPnB1dFdpdGhJbmRleEtleXModmFsdWUsIGtleSwgc3Rh
dGljX2Nhc3Q8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2Rl
KSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNh
Y3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGluZGV4TmFtZXMsIGlu
ZGV4S2V5cywgZWMpOwogfQogCit2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6cHV0KGNvbnN0
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBQ
dXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiB3ZWJJ
bmRleElkcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cykKK3sK
KyAgICBBU1NFUlQod2ViSW5kZXhJZHMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwor
ICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJbmRleElkcy5zaXplKCkpOworICAgIFZl
Y3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlz
KHdlYkluZGV4S2V5cy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJ
bmRleElkcy5zaXplKCk7ICsraSkgeworICAgICAgICBpbmRleElkc1tpXSA9IHdlYkluZGV4SWRz
W2ldOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5k
ZXhLZXlzW2ldLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5k
ZXhLZXlzW2ldLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2Vi
SW5kZXhLZXlzW2ldW2pdOworICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7Cisg
ICAgfQorCisgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKK30K
Kwogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJL
ZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVz
LCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKHdlYkluZGV4TmFtZXMu
c2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwpAQCAtOTEsNiArMTA4LDIyIEBAIHZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmlt
YXJ5S2V5LCBjb25zdCBXZWJWCiAgICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHByaW1h
cnlLZXksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCit2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6
c2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYgcHJpbWFyeUtleSwgY29uc3QgV2ViVmVjdG9y
PGxvbmcgbG9uZz4mIHdlYkluZGV4SWRzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYg
d2ViSW5kZXhLZXlzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7Cisg
ICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMod2ViSW5kZXhJZHMuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5cyh3
ZWJJbmRleEtleXMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5k
ZXhJZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW5kZXhJZHNbaV0gPSB3ZWJJbmRleElkc1tp
XTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlMaXN0KHdlYkluZGV4
S2V5c1tpXS5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYkluZGV4
S2V5c1tpXS5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGluZGV4S2V5TGlzdFtqXSA9IHdlYklu
ZGV4S2V5c1tpXVtqXTsKKyAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OworICAg
IH0KKyAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJZHMs
IGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KCkpOworfQorCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3
ZWJJbmRleE5hbWVzLnNpemUoKSk7CkBAIC05OSw2ICsxMzIsMTQgQEAgdm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
d2ViSW5kZXgKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywg
dHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCit2
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCit7CisgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKHdlYkluZGV4TmFtZXMu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4TmFtZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGluZGV4SWRzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKKyAgICBtX29i
amVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhJZHMsIHRyYW5zYWN0aW9uLmdldElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKK30KKwogdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OmRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgV2Vi
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRl
RnVuY3Rpb24oa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBlYyk7CkBAIC0xMjUsMTEgKzE2NiwyNCBAQCBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZAogICAg
IHJldHVybiBuZXcgV2ViSURCSW5kZXhJbXBsKGluZGV4KTsKIH0KIAorV2ViSURCSW5kZXgqIFdl
YklEQk9iamVjdFN0b3JlSW1wbDo6aW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCit7Cisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3Jl
LT5pbmRleChvYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7Cit9CisKIHZvaWQgV2Vi
SURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgdHJhbnNhY3Rpb24uZ2V0
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAordm9pZCBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7Cit9CisKIHZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiBr
ZXlSYW5nZSwgV2ViSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgV2ViSURCVHJhbnNhY3Rpb246OlRhc2tUeXBlIHRhc2tUeXBlLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIG1fb2JqZWN0U3RvcmUtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIHN0YXRpY19jYXN0PElE
QkN1cnNvcjo6RGlyZWN0aW9uPihkaXJlY3Rpb24pLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKGNhbGxiYWNrcykpLCBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlPih0YXNrVHlwZSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IDdlOWVkMjU3M2NiOTRiODk3YmNm
NTg3NWE1MjMyMjc2MWIxNDMwOGQuLjVkZTNjOWExNWFkOGVmNWY0NjBhODg2YWMxY2RlYWJjY2Jk
NTgyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCkBAIC00NywxNCArNDcsMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXQo
Y29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHB1dFdpdGhJbmRleEtleXMo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9k
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYpOwogICAgIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklE
QktleSYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdm9p
ZCBzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9u
Zz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBzZXRJ
bmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYpOwogICAgIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgV2ViSURCSW5kZXgqIGNyZWF0
ZUluZGV4KGxvbmcgbG9uZywgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJLZXlQ
YXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgV2ViSURCSW5kZXgqIGluZGV4KGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYklEQkluZGV4KiBpbmRl
eChsb25nIGxvbmcpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IGRlbGV0ZUluZGV4KGxvbmcgbG9uZywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAKICAgICB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDdXJzb3I6OkRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViSURCVHJhbnNh
Y3Rpb246OlRhc2tUeXBlLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGNvdW50KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCA1Y2JiZWU2NjM0YTNiZmYxOTQ3MGQ2Zjc5YjBhYWY0YWI4NzA0YzBmLi42NjE2ZDY3
MWZjMzBjOTdlNjcyNjE0YzFhNDE5OWUzYTdkMDg4NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKQEAgLTU1LDYgKzU1
LDE0IEBAIFdlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0
b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgRXhjCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmpl
Y3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOwogfQogCitXZWJJREJPYmplY3RTdG9yZSogV2ViSURC
VHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZShsb25nIGxvbmcgaW5kZXhJZCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKGluZGV4SWQsIGVjKTsKKyAgICBp
ZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IFdlYklE
Qk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7Cit9CisKIHZvaWQgV2ViSURCVHJhbnNhY3Rp
b25JbXBsOjpjb21taXQoKQogewogICAgIG1fYmFja2VuZC0+Y29tbWl0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDY2
ZTMxNTMwMDBlNzNiMGNlYjc0ZTg3YTI3Zjc4OWZiYjJkZmE3MzMuLjFlZTZhYjgwMTk3ZWY3OGZh
ZmExM2U5NmZkMDVmNzBmMzdiYWQ3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCkBAIC0zOSw5ICszOSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYklEQlRyYW5zYWN0aW9uSW1wbDogcHVibGljIFdlYklEQlRy
YW5zYWN0aW9uIHsKIHB1YmxpYzoKICAgICBXZWJJREJUcmFuc2FjdGlvbkltcGwoV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZp
cnR1YWwgfldlYklEQlRyYW5zYWN0aW9uSW1wbCgpOyAgCisgICAgdmlydHVhbCB+V2ViSURCVHJh
bnNhY3Rpb25JbXBsKCk7CiAKICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RT
dG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25nIGxvbmcgaW5kZXhJZCwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFj
a2VuZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJh
Y2tlbmRUZXN0LmNwcAppbmRleCA4OTM2M2YwMDc3NDRkNDA2MjhkYjU4NmNlOTdiYzQ3NzEzZmJl
ZmFlLi5lOTdiYzdmNmRmOWE0MThjZmY2NTYwZDJjMTIzNGViYzFkM2E2ODQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHAKQEAgLTE1Miw4ICsxNTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRGF0YWJh
c2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIElEQkRhdGFiYXNlTWV0YWRhdGEo
KTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSB7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdM
aXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNo
b3J0IG1vZGUpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikKICAgICB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>